我想用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}'
但是,它在每行代码之间追加/ *和* /。
答案 0 :(得分:3)
我想从
line two code
向end 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