使用bash-script解析和编辑源代码

时间:2015-07-09 13:23:30

标签: bash shell parsing

我有几个包含以下行的源代码文件(.cpp):

other stuff
...
TRACE(arg1, arg2, ...);
...
other stuff

其中arg1,arg2,...表示由逗号分隔的任意函数调用参数,可能前面有空格。

目标是解析项目中每个源文件中的每一行,并从函数调用TRACE中删除第一个参数(arg1),例如

TRACE(arg2, arg3, ...);

请注意,函数TRACE前面可以有任意数量的空格,并且本身可以包含字符串TRACE,例如

TRACE(0, TRACE_INFO, "Test ");
    TRACE(  0 , TRACE, 4,5 ,6);

有一种简单的方法吗?

测试文件test.cpp包含:

   TRACE( "I2Ccontrol::I2Ccontrol", TRACE_FATAL,0);

3个空格,没有前面的行没有后续行

1 个答案:

答案 0 :(得分:3)

将sed与扩展正则表达式一起使用:

sed -r 's/(\bTRACE\()([^",]+,\s*|\s*"[^"]*"\s*,\s*)(.*\);)/\1\3/' file

要使用sed --in-place -r ...

原地更改文件

编辑:

测试来自评论的输入:

echo '   TRACE( "I2Ccontrol::I2Ccontrol", TRACE_FATAL,0);' |sed -r 's/(\bTRACE\()([^",]+,\s*|\s*"[^"]*"\s*,\s*)(.*\);)/\1\3/'
#three white space before TRACE

输出:

   TRACE(TRACE_FATAL,0);