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/\&/\&/g'
另一方面,我也试过使用:
# The -e flag
sed -e '${/^$/d;}'
这对我也不起作用。
这可以直接从 XMLStarlet 完成而无需添加额外的 sed
管道吗?
我的 sed
怎么了?什么是正确的 sed
方法?
将它放在脚本末尾对我有用:
printf "%s" "$(</results.txt)" > results.txt
我一直在寻找直接在 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"
我想做的是删除 -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/\&/\&/g'
另一方面,我也试过使用:
# The -e flag
sed -e '${/^$/d;}'
这对我也不起作用。
这可以直接从 XMLStarlet 完成而无需添加额外的 sed
管道吗?
我的 sed
怎么了?什么是正确的 sed
方法?
将它放在脚本末尾对我有用:
printf "%s" "$(</results.txt)" > results.txt
我一直在寻找直接在 XMLStarlet 中执行此操作的方法,因此这是一个临时答案。