使用sed或awk注释掉一个文件块

时间:2016-07-19 14:08:16

标签: bash awk sed

我想用sed或awk注释掉一个文件中的代码块。

实施例。输入

this is source file;
line one code;
line two code;
line three code;
line four code;
line 5 code;
if something then
  line 6 code;
end if;

在此,我想从代码的第二行注释掉结束if。

即输出应为

this is source file;
line one code;
/*
line two code;
line three code;
line four code;
line 5 code;
if something then
  line 6 code;
end if;
*/

试过,这个

awk '"/line two code;/{e=0}/end if;/" {printf("%s%s%s\n", "/*", $0, "*/"); next} {print}'

但是,它在每行代码之间追加/ *和* /。

4 个答案:

答案 0 :(得分:3)

  

我想从line two codeend if发表评论:

您可以像这样使用awk

awk '/line two code;/{print "/*"; p++} 1; p && /end if;/{print "*/"; p=0}' file

this is source file;
line one code;
/*
line two code;
line three code;
line four code;
line 5 code;
if something then
  line 6 code;
end if;
*/

答案 1 :(得分:2)

使用sed的解决方案的工作原理大致相同:

sed '/line two code;/s|$|\n/*|; /end if;/s|$|\n*/|' file

答案 2 :(得分:1)

Arunkumar Ramamoorthy,我认为以下代码可能有所帮助:

awk '/line two code;/{print "/*"}{print $0}/end if;/{print "*/"}' input

至少,它可以在我的Mac上运行

➜  ShellBean cat input 
this is source file;
line one code;
line two code;
line three code;
line four code;
line 5 code;
if something then
  line 6 code;
end if;
➜  ShellBean awk '/line two code;/{print "/*"}{print $0}/end if;/{print "*/"}' input
this is source file;
line one code;
/*
line two code;
line three code;
line four code;
line 5 code;
if something then
  line 6 code;
end if;
*/

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed $'/line two code/{:a;N;/end if/!ba;i/*\n;a*/\n}' file

这会将两个文字之间的线条填充到图案空间中,然后在打印出来时插入并附加所需的线条。

N.B。 $'...是基础,允许单行包含换行符,但是如果你喜欢多个命令也可以使用:

sed -e '/line two code/{:a;N;/end if/!ba;i/*' -e 'a*/' -e '}' file