0

我有一个包含内容的文件

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

我需要检查

 xxx{ sample test }
 bewolf

并注释掉这些行

/*xxx{ sample test }
bewolf*/

我试过grepgrep搜索字符串。由于 Dash 脚本没有数组,因此它是一项更加艰巨的工作。

我试图获取开始和结束索引,以便我可以使用headand删除该部分tail

欢迎任何其他想法,如使用sedawk

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

4

5 回答 5

0

更短:

awk '/sample test/,/bewolf/' infile >outfile
于 2012-06-01T11:19:51.297 回答
0

这可能对您有用:

 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//\/* & *\//
于 2012-06-01T13:58:13.340 回答
0

假设您要评论具有以下内容的行:

xxx{ 样本测试 }
bewolf

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
于 2012-06-01T10:47:52.750 回答
0

如果多个结束评论不打扰你,你可以使用这样的简单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

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

于 2012-06-01T11:04:44.427 回答
0

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

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

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

于 2012-06-01T12:13:55.813 回答