在源代码中删除函数调用中间的换行符

时间:2013-07-18 00:18:25

标签: regex shell sed awk grep

我有一个源代码(在C中),它被格式化并在函数调用的中间添加换行符。 例如,我有

CALL_A( par1, par2, 12345);

以及我拥有的其他地方

CALL_A(par1, par2
      ,12345);

我需要找到作为函数的第3个参数传递的数字。 我使用此sed命令删除换行符,但它与它不匹配:

cat source.c | sed -e ':a; /CALL_A*$/ { N; s/$//; ba; }'

有关如何在函数调用中删除换行符的任何建议?

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

sed -e ':a; /CALL_A[^)]*$/{N; s/\n *//; ba}'

由于以下原因,您当前的版本无效:

  • /CALL_A*$/与来电不匹配,正则表达式中的*重复上一个元素,因此您要查找以CALL_结尾的行,然后查找任意数量的{ {1}}。我将其更改为A,以便匹配/CALL_A[^)]*$/后跟任意数量不是CALL_A的字符的行,这样就不会匹配任何调用的行单行。
  • )无法做任何事情,s/$//匹配在该行的末尾,但它与换行符不匹配,因此替换它不会有任何好处。相反,我使用$,它将删除换行符和下一行的任何前导空格。