如何使用sed仅给第一个匹配行起的14行(含匹配行)添加注释
方案1:GNU Sed (Linux环境默认sed)
直接执行以下命令即可实现给第一个匹配^ Text$开始的14行加//注释:
sed '0,/^ Text$/{//{:a;N;14!ba;s/^/\/\//mg}}' 目标文件
命令逻辑说明:
0,/^ Text$/:限定处理范围为文件开头到第一次匹配到目标行的区间,避免后续所有匹配行都被处理//:在上述区间内命中目标行时触发后续逻辑:a定义循环标签aN:将下一行内容追加到当前模式空间14!ba:如果模式空间内凑不够14行就跳回标签a继续追加s/^/\/\//mg:开启多行模式,给模式空间内所有行的行首添加//注释
方案2:BSD Sed (macOS默认sed适配)
BSD sed对标签、分支的语法要求更严格,需要拆分参数块:
sed -e '0,/^ Text$/{//{' -e ':a' -e 'N;14!ba' -e 's/^/\/\//mg' -e '}' -e '}' 目标文件
通用扩展:处理第N次匹配的场景
如果需要给第k次匹配的目标行开始的14行加注释,只需要调整计数器阈值即可,以下是通用写法(适配GNU Sed):
# 示例为第2次匹配,修改x\{2\}中的数字即可切换到对应次数 sed '/^ Text$/{g;s/^/x/;h;s/x\{2\}//;t do;b;:do;:a;N;14!ba;s/^/\/\//mg}' 目标文件
这个写法通过hold space累计匹配次数,命中指定次数时才触发注释逻辑。
内容的提问来源于stack exchange,提问作者mfjimenezDev
相关产品推荐
相关产品推荐

