我有一个源代码(在C中),它被格式化并在函数调用的中间添加换行符。 例如,我有
CALL_A( par1, par2, 12345);
以及我拥有的其他地方
CALL_A(par1, par2
,12345);
我需要找到作为函数的第3个参数传递的数字。 我使用此sed命令删除换行符,但它与它不匹配:
cat source.c | sed -e ':a; /CALL_A*$/ { N; s/$//; ba; }'
有关如何在函数调用中删除换行符的任何建议?
答案 0 :(得分:2)
尝试以下方法:
sed -e ':a; /CALL_A[^)]*$/{N; s/\n *//; ba}'
由于以下原因,您当前的版本无效:
/CALL_A*$/
与来电不匹配,正则表达式中的*
重复上一个元素,因此您要查找以CALL_
结尾的行,然后查找任意数量的{ {1}}。我将其更改为A
,以便匹配/CALL_A[^)]*$/
后跟任意数量不是CALL_A
的字符的行,这样就不会匹配任何调用的行单行。)
无法做任何事情,s/$//
匹配在该行的末尾,但它与换行符不匹配,因此替换它不会有任何好处。相反,我使用$
,它将删除换行符和下一行的任何前导空格。