匹配sed命令中的特定行



如何为替换命令匹配一组特定的行?

(不正确):

sed -e'71,116,211s/[ ]+$//' ...

我只想去掉第71、116和211行的尾部空白

您可以尝试以下操作:

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

sed '71s/ *$//;116s///;211s///'
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

这可能对你有用(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

最新更新