【发布时间】:2013-06-29 03:20:32
【问题描述】:
如何为替换命令匹配一组特定的行?
(不正确):
sed -e'71,116,211s/[ ]+$//' ...
我只想去除第 71、116 和 211 行的尾随空格
【问题讨论】:
标签: unix text command-line sed pipe
如何为替换命令匹配一组特定的行?
(不正确):
sed -e'71,116,211s/[ ]+$//' ...
我只想去除第 71、116 和 211 行的尾随空格
【问题讨论】:
标签: unix text command-line sed pipe
你可以试试这样的:
awk 'NR== 71 || NR == 116 || NR == 211 {sub(/ *$/,"",$0)}{print $0}'
或
sed '71s/ *$//;116s///;211s///'
【讨论】:
sed 解决方案,但有一点改进(我认为),如果您将正则表达式部分留空,则需要最后一个。所以只需要写一次(第一行)然后像:... 116s///;...
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
【讨论】: