2016-07-29 46 views
1

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

例如:

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

我想有:

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

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

********* ********* EDIT

这里是在两个步骤中与SED的溶液。有答案的AWK解决方案也可用。

  1. 换上了新行的所有注释:sed 's/\/\//\n\/\//g'
  2. 删除 ';'仅在以“//”开头的行上:sed '/^\/\// s/;//g'

回答

0

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 
+0

谢谢,这是AWK的确简单。 我最终设法用SED分两步完成它: 1.把所有注释放在一个新行上:'sed's/\/\ // \ n \/\ // g'' 2.删除' ;”仅限于以“//”开头的行:'sed'/^\/\ // s /; // g'' – Iwaa