注释掉行,仅当前一行包含匹​​配的字符串时

时间:2016-07-05 17:22:05

标签: bash awk sed

使用bashsed注释一个awk脚本的解决方案,只有在前一行包含匹​​配的字符串时才会注释掉。

例如,包含以下内容的文件

...

if [ $V1 -gt 100 ]; then
some specific commands
else
some other specific commands
fi

...

我想注释掉包含else的行,但前提是前一行包含specific

我尝试使用多个sed命令以及grep命令进行管道无效。

2 个答案:

答案 0 :(得分:3)

sed -E '/specific/{n;s/^([[:blank:]]*)else$/\1#else/}'

<强>输出

...

if [ $V1 -gt 100 ]; then
some specific commands
#else
some other commands
fi

...

回顾

  1. /specific/查找包含特定
  2. 模式的行
  3. n将下一行添加到模式空间。 n自动打印当前模式空间。
  4. 检查下一行是否为(one_or_more_spaces)else,如果是,则使用(one_or_more_spaces_found_previously)#else替换该行。请记住,()用于模式重用,\1是先前匹配的模式重用。
  5. -E启用扩展正则表达式
  6. -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开头有可选空格,我们只需将其评论出来。