我如何使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。