在保留行号的同时删除多行注释

时间:2014-03-25 06:44:10

标签: shell unix awk ksh

我正在使用此功能删除多行注释。

awk '/^--/ {next} /^\/\*/ && /\*\/$/{next} /^\/\*/{c=1;next} /\*\/$/{c=0;next} !c{FS="--|\/\*";a=$1;FS="\\*\\/";a=a$2;$0=a;print}' filename

输入就像这样

aaaaaaa
/*bbbbb*/
ccccccc
/*bbbbb
bbbbbb*/
ddddd

我希望它像

aaaaaaa 

ccccccc


dddddd

但即将到来

aaaaaaa
ccccccc
ddddddd

任何人都可以帮助我......

由于

2 个答案:

答案 0 :(得分:1)

awk可能是要走的路:

awk '/\/\*|\*\// {$0=""}1' file
aaaaaaa

ccccccc


ddddd

它只是用/**/代替行。


如果bbbbbb超过一个开始/停止行,请执行以下操作:

cat file
aaaaaaa
/*bbbbb*/
ccccccc
/*bbbbb
bbbbbb
bbbbbb*/
ddddd

并且您要将所有内容从/*移除到*/,而不仅仅是使用这些代码:

awk '/^\/\*/ {f=1} {print f?"":$0} /\*\/$/ {f=0}' file
aaaaaaa

ccccccc



ddddd

答案 1 :(得分:0)

您的代码会对注释的格式进行一些假设。我将假设您的假设对于您的代码是正确的,并且只提供缺少的空行:

$ awk '/^--/ {next} /^\/\*/ && /\*\/$/{print ""; next} /^\/\*/{c=1;print "";next} /\*\/$/{c=0;print "";next} !c '  filename
aaaaaaa

ccccccc


ddddd