如何用sed在前置行含then的目标行后添加指定代码?
解决方案
可以用sed的N命令将下一行读入模式空间,结合匹配判断实现需求,以下是简洁可行的命令:
sed '/then/{ N /\n# \$UXEXE\/uxset msg/{ s/\n/\n echo ""\n/ } }' input_file
命令逻辑说明
- 定位目标前置行:
/then/{...}匹配所有包含"then"的行,进入后续处理逻辑。 - 合并上下行:
N将当前行的下一行追加到模式空间,此时模式空间内容为含then的行\n目标注释行。 - 验证匹配条件:
/\n# \$UXEXE\/uxset msg/检查合并后的内容是否符合「前一行含then、当前行是目标注释行」的要求。 - 插入指定代码:
s/\n/\n echo ""\n/将模式空间中的换行符替换为「换行+带缩进的echo行+换行」,完成目标代码的插入。
测试结果
将你的输入内容保存为test.sh,执行上述命令后,输出与期望完全一致:
if [ $coderet -ne 0 ];then # $UXEXE/uxset msg "*** KO *** voir log systeme ***" echo "" exit 1 fi if [ $coderet -ne 0 ]; then # $UXEXE/uxset msg "*** KO *** voir log systeme ***" echo "" exit 1 fi
内容的提问来源于stack exchange,提问作者Mister Claret
相关产品推荐
相关产品推荐

