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

时间:2017-10-19 14:41:02

标签: bash shell unix sed xmlstarlet

这是一项相当简单的任务,一直困扰着我。我有以下内容:

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"

我想要删除xmlstarlet-o 'end=2' -n | \生成的最后一个换行符。当它到达结尾时,如果链接列表仍然产生-n(换行符),就好像它继续添加更多链接,但实际上我想避免最后一个-n实例相应的href实例{1}}。

我应该执行此操作的sed '${/^$/d;}' \会返回以下错误:

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

它以某种方式无法正确地将之前的STDOUT传递给sed STDIN。在我以前的一个questions中,我使用了类似的东西,这个sed命令在我之前工作过:

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

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

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

这对我也不起作用。

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

我的sed有什么问题?什么是正确的sed方法?

1 个答案:

答案 0 :(得分:0)

将这个放在脚本的末尾对我有用:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class='bold'>Class 1 / Class 2 / Class 3</span>

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