正则表达式 – 用C注释替换(单行)C注释

我如何使用sed将源文件中的所有C风格注释替换为C风格.

所有这些:

int main() {
  /* some comments */
  ...

至:

int main() {
  // some comments
  ...

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

int f(int x /*x-coordinate*/ );

所以我试过这个:

sed -i 's/ \/\* .*  \*\ / \/\/* /g' src.c

但它保持文件不变.
This帖子类似,但我试图了解sed的表达式语法.自“.”匹配任何字符,“*”匹配某些模式的零个或多个.我假设“.*”匹配任何数字的任何字符.

解决方法

sed -i 's:\(.*\)/[*]\(.*\)[*]/:\1 // \2:' FILE

这会像这样改变每一行:

aaa  /* test */

成这样的一行:

aaa  // test

如果您在同一行上有更多注释,则可以应用此更复杂的解析器,该解析器转换如下行:

aaa /* c1 */ bbb /* c2 */ ccc

aaa  bbb ccc // c1 c2
sed -i ':r s:\(.*\)/[*]\(.*\)[*]/\(.*\):\1\3 //\2:;tr;s://\(.*\)//\(.*\)://\2\1:;tr' FILE

更复杂的情况是当你在一行的字符串中有注释时,比如在call(“/ * 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中,并将其称为:

sed -i -f c-comments.sed FILE

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...