【问题标题】:Remove all occurence of ';' in C++ comments with SED删除所有出现的 ';'在带有 SED 的 C++ 注释中
【发布时间】:2016-12-03 23:44:37
【问题描述】:

我是 sed 的新手,我无法使用它来删除所有 ';' C++ 文件 cmets 中的字符,即开始或包含字符串“//”的行(我已经将“/* ... */” cmets 转换为“// ...” cmets)。

例如:

// lorem; ipsum ; test
int a; // 1 ; 2 ; 3 ;

我想拥有:

// lorem ipsum  test
int a; // 1  2  3 

对于我的 C++ 文件中的任何评论。

*********编辑*********

这是一个分两步使用 SED 的解决方案。答案中也提供了 AWK 的解决方案。

  1. 将所有 cmets 放在一个新行上:sed 's/\/\//\n\/\//g'
  2. 删除“;”仅在以“//”开头的行上:sed '/^\/\// s/;//g'

【问题讨论】:

    标签: sed comments character-replacement


    【解决方案1】:

    在 AWK 中很简单。创建文件r.awk

    function process(s) {
        gsub(";", "", s)
        return s
    }
    
    {
        sep = "//"; ns=length(sep)
        m = match($0, sep)
        if (!m) {print; next}
    
        body = substr($0,    1, m-1)
        cmnt = substr($0, m+ns     )
    
        print body sep process(cmnt)
    }
    

    用法:

    awk -f r.awk input.file
    

    【讨论】:

    • 谢谢,AWK 确实很简单。我终于设法用 SED 分两步完成了:1. 将所有 cmets 放在一个新行上:sed 's/\/\//\n\/\//g' 2. 删除 ';'仅在以“//”开头的行上:sed '/^\/\// s/;//g'
    猜你喜欢
    • 2012-11-12
    • 2015-06-05
    • 2014-05-16
    • 2014-11-30
    • 2023-03-09
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多