You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gawk/sed原地批量修改C++代码注释格式的技术求助

批量修改C++文件注释格式适配文档生成工具

需求说明

原有注释格式

需要修改大量.cpp、.h/.hpp文件中的注释,原有格式如下(分隔线的-数量不固定):

//-----------------------------------------------------------
//   NAME : Class
//   DESCRIPTION : Vague information
//-----------------------------------------------------------

目标格式(二选一)

样式一(保留原分隔线)

//-----------------------------------------------------------
/*!
//   NAME : Class
//   DESCRIPTION : Vague information
*/
//-----------------------------------------------------------

样式二(移除分隔线)

/*!
//   NAME : Class
//   DESCRIPTION : Vague information
*/

现有问题

之前尝试的gawk原地替换命令存在语法错误,且仅能处理单个文件,无法批量操作。原命令:

$ gawk -i inplace '/^//--.*/&&v++%2 {sub(/^//--.*/, "/*!")}' filename.cpp
$ gawk -i inplace '/^//--.*/{sub(/^//--.*/, "*/")}' filename.cpp

预期目标是:将奇数个匹配的//---*行替换为/*!,偶数个替换为*/,同时实现批量处理。

解决方案

修正语法并实现批量处理(适配样式一)

原命令的问题在于正则表达式中//未正确转义,且逻辑拆分错误。使用以下命令可批量处理目标文件:

# 批量处理当前目录及子目录下的.cpp/.h/.hpp文件
find . -type f \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec gawk -i inplace '
/^\/\/-+/ {
    if (count++ % 2 == 0) {
        print $0; print "/*!";
    } else {
        print "*/"; print $0;
    }
    next;
}
1' {} +
  • 逻辑说明:匹配以//开头后跟至少一个-的行,奇数个匹配行(count从0开始,偶数索引)保留原分隔线并追加/*!;偶数个匹配行(奇数索引)先输出*/再保留原分隔线。
  • -i inplace实现原地修改,1表示输出所有未匹配的行。

样式二的批量处理方案(移除分隔线)

若不需要保留原分隔线,直接替换成对的分隔线为/*!和*/:

find . -type f \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec gawk -i inplace '
/^\/\/-+/ {
    if (count++ % 2 == 0) {
        print "/*!";
    } else {
        print "*/";
    }
    next;
}
1' {} +
  • 逻辑说明:匹配到分隔线时,奇数个替换为/*!,偶数个替换为*/,直接跳过原分隔线的输出。

单文件测试命令(可选)

如果需要先测试单个文件,可使用:

# 样式一测试
gawk '/^\/\/-+/ {if (count++%2==0) {print $0; print "/*!";} else {print "*/"; print $0;} next;}1' test.cpp > test_modified.cpp

# 样式二测试
gawk '/^\/\/-+/ {if (count++%2==0) {print "/*!";} else {print "*/";} next;}1' test.cpp > test_modified.cpp

内容的提问来源于stack exchange,提问作者Brinck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:30:21