2017-10-19 102 views
0

这是一直困扰我一段时间一个较为简单的任务最后N(新行)。我有以下几点: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

sed '${/^$/d;}' \认为应该这样做将返回以下错误:

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

它并不会自动管以前STDOUTsedSTDIN正确。在我之前questions一个我曾与类似的东西,这sed命令为我工作较早:

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

这对我来说没有工作:

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

在另一方面,我也尝试使用无论是。

这能直接从XMLStarlet,而无需添加额外的sed管办?

什么是错我的sed?什么是正确的sed方法?

+1

后\ – Cyrus

+0

喜@Cyrus删除所有空格,我不完全理解。根据这个[问题](https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable)我发现'sed -e's/[[:space: ]] * $ //''应该删除尾随的空格。但是,这并不会在最后一个URL后面删除**换行符**。你能否提供一个例子? –

+1

你的代码包含这两行:'-o'end = 2'-n | \'和'sed'$ {/^$/d;}'\'。在\之后都包含一个whilespace。删除这些空格。 – Cyrus

回答

0

在脚本的末尾放置这个工作对我来说:

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

我一直在寻找直接XMLStarlet这样做,因此这是一个临时的答案。