XMLStarlet 使用 Sed 删除最后一个 -n(换行符)

XMLStarlet remove last -n (newline) using Sed

这是一个比较简单的任务,困扰了我一段时间。我有以下内容:

homepage=$(curl "https://example.com/")

xmlstarlet --quiet fo --html <<<"$homepage" |
xmlstarlet sel -T -t \
    -m "//*[@id='financial']/tbody/tr/td" \
        --if 'not(starts-with(a//@href,"http"))' \
          -o 'https://example.com' \
        --break \
        -v 'a//@href' \
        -o '/?start=1' \
        -o '&' \
        -o 'end=2' -n | \ 
            sed '${/^$/d;}' \ 
                >> "results.txt"

我想做的是删除 -o 'end=2' -n | \xmlstarlet 生成的最后一个 newline。当它到达末尾时,如果 link 列表它仍然会产生一个 -n (换行符),就好像它在哪里继续添加更多 links,但实际上我想避免最后一个 -n 对应于最后一个 href.

的实例

我的sed '${/^$/d;}' \应该这样做returns出现如下错误:

sed: ${/^$/d;}: No such file or directory
sed:  : No such file or directory

它以某种方式没有正确地将前一个 STDOUT 传送到 sed STDIN。在我之前的一个 中,我使用了类似的东西,这个 sed 命令早些时候对我有用:

sed 's/\&amp;/\&/g'

另一方面,我也试过使用:

# The -e flag
sed -e '${/^$/d;}'

这对我也不起作用。

这可以直接从 XMLStarlet 完成而无需添加额外的 sed 管道吗?

我的 sed 怎么了?什么是正确的 sed 方法?

将它放在脚本末尾对我有用:

printf "%s" "$(</results.txt)" > results.txt

我一直在寻找直接在 XMLStarlet 中执行此操作的方法,因此这是一个临时答案。