使用bash
或sed
注释一个awk
脚本的解决方案,只有在前一行包含匹配的字符串时才会注释掉。
例如,包含以下内容的文件
...
if [ $V1 -gt 100 ]; then
some specific commands
else
some other specific commands
fi
...
我想注释掉包含else
的行,但前提是前一行包含specific
。
我尝试使用多个sed
命令以及grep
命令进行管道无效。
答案 0 :(得分:3)
sed -E '/specific/{n;s/^([[:blank:]]*)else$/\1#else/}'
<强>输出强>
...
if [ $V1 -gt 100 ]; then
some specific commands
#else
some other commands
fi
...
回顾
/specific/
查找包含特定 n
将下一行添加到模式空间。 n
自动打印当前模式空间。(one_or_more_spaces)else
,如果是,则使用(one_or_more_spaces_found_previously)#else
替换该行。请记住,()
用于模式重用,\1
是先前匹配的模式重用。-E
启用扩展正则表达式-i
用于实际编辑实际文件答案 1 :(得分:3)
您可以使用此awk解决方案:
"ItemRef" : {
"value" : null,
"name" : null
}
awk '/specific/{p=NR} NR==p+1{p=0; if (/^[[:blank:]]*else/) $0 = "#" $0} 1' file
if [ $V1 -gt 100 ]; then
some specific commands
#else
some other commands
fi
中,我们找到/specific/p=NR
并将当前行#存储在specific
p
条件p == NR+1
如果该行在p=0
开头有可选空格,我们只需将其评论出来。