2013-07-01 83 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