Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex sed将(单行)C注释替换为C++;评论 如何使用SED将源文件中的所有C风格注释替换为C++样式。< /P>_Regex_Sed - Fatal编程技术网

Regex sed将(单行)C注释替换为C++;评论 如何使用SED将源文件中的所有C风格注释替换为C++样式。< /P>

Regex sed将(单行)C注释替换为C++;评论 如何使用SED将源文件中的所有C风格注释替换为C++样式。< /P>,regex,sed,Regex,Sed,所有这些: 致: 所有注释都是单行的,中间没有这样的代码: int f(int x /*x-coordinate*/ ); aaa // test sed -i -f c-comments.sed FILE 所以我试了一下: sed -i 's/ \/\* .* \*\ / \/\/* /g' src.c 但它保持文件不变。 post是类似的,但我试图理解sed的表达式语法。因为“.”匹配任何字符,“*”匹配某些模式的零个或多个字符。我假设“*”匹配任何字符的任何数目 sed -

所有这些:

致:

所有注释都是单行的,中间没有这样的代码:

int f(int x /*x-coordinate*/ );
aaa  // test
sed -i -f c-comments.sed FILE
所以我试了一下:

 sed -i 's/ \/\* .*  \*\ / \/\/* /g' src.c
但它保持文件不变。 post是类似的,但我试图理解sed的表达式语法。因为“.”匹配任何字符,“*”匹配某些模式的零个或多个字符。我假设“*”匹配任何字符的任何数目

sed -i 's:\(.*\)/[*]\(.*\)[*]/:\1 // \2:' FILE
这将像这样变换每条线:

aaa  /* test */
排成这样的一行:

int f(int x /*x-coordinate*/ );
aaa  // test
sed -i -f c-comments.sed FILE
如果同一行上有更多注释,则可以应用此更复杂的解析器,该解析器可以转换以下行:

aaa /* c1 */ bbb /* c2 */ ccc
进入


更复杂的情况是,在一行的字符串中有注释,如在
调用(“/*string*/”
中。以下是解决此问题的脚本
c-comments.sed

s:\(["][^"]*["]\):\n\1\n:g
s:/[*]:\n&:g
s:[*]/:&\n:g
:r
s:["]\([^\n]*\)\n\([^"]*\)":"\1\2":g
tr
:x
s:\(.*\)\n/[*]\([^\n]*\)[*]/\n\(.*\)$:\1\3 // \2:
s:\(.*\)\n\(.*\)//\(.*\)//\(.*\):\1\n\2 //\4\3:
tx
s:\n::g
将此脚本保存到文件c-comments.sed中,并按如下方式调用它:

int f(int x /*x-coordinate*/ );
aaa  // test
sed -i -f c-comments.sed FILE

它是一个分离器。命令“s”后的下一个字符称为分隔符,可以是任何字符。例如,如果需要替换的字符串包含“/”,则插入“/”作为分隔符是不好的,因为在这种情况下,我必须用反斜杠“/”引用。在本例中,我使用了“:”这是我第一次听到“C注释”和“C++注释”这两个名称