You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:42:03