2017-10-19 101 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這樣做,因此這是一個臨時的答案。