2013-07-01 120 views

回答

1

你可以嘗試這樣的:

awk 'NR== 71 || NR == 116 || NR == 211 {sub(/ *$/,"",$0)}{print $0}' 

sed '71s/ *$//;116s///;211s///' 
+1

我想過發佈你的'sed'解決方案,但有一點改進(我認爲),如果你把正則表達式部分留空,它會佔用最後一個。所以只需要寫一次(第一行),然後像:'... 116s ///; ...' – Birei

+0

好點 - 我忘記了 - 我已經更新了答案 –

1
sed '71bl;116bl;211bl;b;:l;s/[ ][ ]*$//' input 

對於任何指定的行,此腳本跳轉到標籤l。其他線路將跳到腳本的末尾,僅有branch

而且一個awk的解決方案:

awk -v k="71,116,221" 'BEGIN{split(k,a,",")} 
      (NR in a) { sub(/ *$/,"",$0) }1' input 
0

這可能爲你工作(GNU SED):

sed -r '/\s+$/!b;71s///;116s///;221s///' file 

或者是:

sed -e '/ *$/!b' -e '71s///' -e '116s///' -e '221s///' file 

或已經說過:

sed -e '71ba' -e '116ba' -e '221ba' -e 'b' -e ':a' -e 's/ *$//' file