繁体   English   中英

如何在文件中搜索多行并在bash / dash中注释这些行

[英]how to search for multiple lines in a file and comment those lines in bash/dash

我有一个包含内容的文件

abc dbw ;\
xxx{ sample test } 
bewolf \
bewolf 
test

我需要检查

 xxx{ sample test }
 bewolf

并像这样注释掉这些行

/*xxx{ sample test }
bewolf*/

我尝试使用grep但是grep搜索字符串。 由于Dash脚本没有数组,因此使其工作更加艰巨。

我试图获取开始和结束索引,以便可以使用headtail剪切出该部分。

欢迎使用sedawk类的其他任何想法。

更笼统地说,我需要使用Bash脚本在C文件中注释一个宏。

假设您要注释以下各行:

xxx {样本测试}
狼人

awk '{if($0~/bewolf/ || $0~/xxx{ sample test }/)print "//"$0;else print}'

测试:

    > awk '{if($0~/bewolf/ || $0~/xxx{ sample test }/)print "//"$0;else print}' temp
    abc dbw ;\
//    xxx{ sample test } 
//    bewolf \
//    bewolf 
    test

如果多个结尾注释不打扰您,则可以使用一个简单的sed如下所示:

sed -e "s%^xxx{ sample test }$%\\/\\*&\\*\\/%" -e "s%^bewolf$%\\/\\*&\\*\\/%" file.txt

输入:

abc dbw ;\
xxx{ sample test }
bewolf \
bewolf
test

输出:

abc dbw ;\
/*xxx{ sample test }*/
bewolf \
/*bewolf*/
test

如果您想直接覆盖file.txt请添加-i标志。

甚至更短:

awk '/sample test/,/bewolf/' infile >outfile

下面将修改该部分,以匹配行开始,以匹配行结束,以在开头添加单个“ / *”,在末尾添加单个“ * /”。

awk -vstart=xxx -vend=bewolf '$0~start {$0="/*" $0;inmacro=1} inmacro==1 && $0~end {$0=$0 "*/";inmacro=0} {print}' infile > outfile

这可能更接近您要寻找的东西。 当然,如果您不定义变量而不是在指令中对它们进行硬编码,则可以将其缩短。

这可能对您有用:

 sed '/^xxx{ sample test }/!b;:a;$b;N;/.*\nbewolf *$/!ba;s//\/* & *\//' file

说明:

  • 专注于以xxx{ sample test }开头的行。 /^xxx{ sample test }/!b
  • 创建一个循环标签:a
  • 如果文件结束,请保释。 $b
  • 获取下一行。 N
  • 检查期末线bewolf如果没有下一行即循环得到a /.*\\nbewolf *$/!ba
  • 用注释将模式空间括起来并打印出来。 s//\\/* & *\\//

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM