使用sed或正则表达式注释掉函数

时间:2014-12-26 08:51:38

标签: regex bash awk sed

我有一大块C代码,中间是一个我想用宏注释掉的函数

...
...

xyzFunction(){     ...     ..

}
...

应该成为

#ifndef COMMENT_OUT

xyzFunction(){     ...     ..     。     }     #万一     ..

我可以使用以下sed命令添加#ifndef COMMENT OUT sed '/xyzFunction/ i #ifndef COMMENT_OUT' file1.c > opt;mv opt file1.c

但是我怎样才能找到关闭这个函数的匹配花括号,以便我可以在它之后放一个#endif?

2 个答案:

答案 0 :(得分:0)

试试这个。

sed 's/^\(xyzFunction (){\)$/#ifndef COMMENT_OUT\n\1/; s/}$/}\n#endif/' file name

或试试这个,

sed 's/\(.*(.*){\)/#ifndef COMMENT_OUT\n\1/; s/}$/}\n#endif/' file name

答案 1 :(得分:-1)

使用此sed命令

sed  '/xyzFunction (){/s/.*/#ifndef COMMENT_OUT\n&/;/}/s/.*/&\n#endif/'

sed '/runTaskCode(.*)/s/.*/#ifndef COMMENT_OUT\n&/;/}/s/.*/&\n#endif/'

说明:

首先匹配函数名称/runTaskCode(.*)/,如果函数名称已匹配,则将您的字符串放在上一行中,如s/.*/#ifndef COMMENT_OUT\n&/。然后匹配结束大括号,如果匹配则将匹配行后的字符串放入/}/s/.*/&\n#endif/