我需要用空格或使用sed的新行替换C注释



输入文件如下

#include <stdio.h>
int main()
{
// this is a function
float alpha = 0;
// test
/* */
int y = 11; // comment
y = y + 15;
//
char z = 'n';
/* end of file 
c */
}

所需的输出应该像这个

#include <stdio.h>
int main()
{
*
float alpha = 0;*
*
*
int y = 11; *
y = y + 15;*
*
char z = 'n';*
*
*
}

此处*表示EOL。

我试过了,但它只是删除了空格和新行。

sed '/^[ t]*///d;//**//d;/^[ t]*/*/d' $[input file]

这可能对你有用(GNU sed(:

sed -z 's#//[^n]*##g
s#/*#x00#g
s#*/#x01#g
s/x00[^nx00x01]*x01//g;tb
:b;s/x00[^x01n]*n/nx00/;tb;s/x00[^n]*x01//;tb' file

解决方案分为三部分:

  1. 删除单行注释
  2. 删除单行上的多行注释
  3. 删除多行上的多行注释,但保留这些行的换行符

解决方案使用-z选项,如果文件包含null字符,该选项可能会导致问题。

注意:这个解决方案只是局部的,因为许多角案例可能会破坏它,例如作为变量值一部分的文字注释。

sed 's///.*//;s//*.*//;s/.**///' file

该命令的工作原理如下:-第一部分搜索字符串"//"然后消除在同一行上跟随它的{string}。第二部分搜索字符串"0"/";然后消除在同一行上跟随它的{string}。第三部分搜索字符串"0">/";然后消除在同一行上跟随它的{string}。给定解决方案的失败将是当多行注释超过2行时

最新更新