Shell脚本中如何为目标匹配行的上一行添加注释符号?
问题分析
你之前用的sed命令是给匹配abc的行本身加#,但需求是给abc:的上一行添加注释符,方向完全不对。sed默认逐行处理,要操作目标行的上一行,得借助它的模式空间/保持空间暂存行内容。
可行命令
用下面的sed命令可以实现需求:
sed -i 'N;/\nabc:$/s/^/#/;P;D' file
命令解释
N:把下一行内容读入当前模式空间,此时模式空间里是上一行内容\n当前行内容(比如例子里的abcd\nabc:)/\nabc:$/:匹配模式空间里以\nabc:结尾的内容,也就是当前行是abc:的情况s/^/#/:在模式空间的开头(也就是上一行的行首)插入#P:输出模式空间中换行符之前的内容(也就是处理后的上一行)D:删除模式空间中换行符之前的内容,剩下的部分继续循环处理,避免重复输出行
如果你的sed版本不支持-i直接修改文件(比如BSD sed),可以改成:
sed 'N;/\nabc:$/s/^/#/;P;D' file > tmp && mv tmp file
验证效果
原文件内容:
abcd abc:
执行命令后输出:
#abcd abc:
内容的提问来源于stack exchange,提问作者enghyd1
相关产品推荐
相关产品推荐

