2013-07-18 66 views
4

我有一個源代碼(用C語言),它的格式和函數調用中間添加了新行。 比如我有刪除源代碼中函數調用中的換行符

CALL_A(par1, par2, 12345); 

和別的地方我有

CALL_A(par1, par2 
     ,12345); 

我需要找到的數字作爲函數第三個參數傳遞。 我已經使用這個sed命令刪除換行符,但它不匹配它:

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

如何在函數調用中間擺脫換行有什麼建議?

回答

2

嘗試以下操作:

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

您當前的版本不會,原因如下工作:

  • /CALL_A*$/將不匹配的呼叫,在正則表達式的*重複先前的元素,所以您正在尋找以CALL_結尾的行,然後是A。我將其更改爲/CALL_A[^)]*$/,以便它匹配具有CALL_A後面跟隨任意數量不是)的字符的行,這樣您就不會匹配任何在單行上調用該行的行。
  • s/$//不會做任何事情,$匹配在行尾,但它不符合換行符,因此替換它不會有任何好處。相反,我使用s/\n *//,它將刪除換行符和下一行的任何前導空格。
+0

謝謝!效果很好。唯一的一點是,可以用分號替換左括號,以便在接受參數時使用嵌套括號:sed -e':a;/CALL_A [^] * $/{N; s/\ n * //;巴}」 – hashtpaa