2013-07-18 4 views
4

형식이 지정된 소스 코드 (C)가 있으며 함수 호출 도중에 새 줄이 추가되었습니다. 예를 들어 나는소스 코드의 함수 호출 중간에 개행을 제거합니다.

CALL_A(par1, par2, 12345); 

을 가지고 다른 곳에서 나는 숫자가 함수의 세번째 매개 변수로 전달되는 찾을 필요가

CALL_A(par1, par2 
     ,12345); 

있습니다. 가 나는 줄 바꿈을 제거하려면이 나오지 명령을 사용했지만 그것과 일치하지 않습니다

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

함수 호출의 중간에 줄 바꿈을 제거하는 방법에 대한 어떤 제안이?

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

현재 버전은 다음과 같은 이유로 작동하지 않습니다 :

답변

2

다음 시도

  • 가 통화를 일치하지 않습니다, 정규식의 * 이전 요소를 반복 /CALL_A*$/, 그래서 CALL_으로 끝나는 행을 찾은 다음 임의의 수인 A을 찾습니다. 이것을 /CALL_A[^)]*$/으로 변경하여 CALL_A에 이어 )이 아닌 임의의 수의 문자가있는 줄을 일치 시키면 한 줄에 전화를 걸었던 모든 줄이 일치하지 않게됩니다.
  • s/$//은 아무 것도하지 않으며 행 끝에 일치하지만 개행 문자와 일치하지 않으므로 바꾸면 아무 효과가 없습니다. 대신 s/\n *//을 사용 했으므로 줄 바꿈 문자와 다음 줄의 선행 공백이 제거됩니다.
+0

고마워요! 훌륭하게 작동합니다. 매개 변수가 허용 될 때 중첩 괄호를 세미콜론으로 바꿀 수 있다는 점만 제외하면 sed -e ': a;/CALL_A [^;] * $/{N; s/\ n * //; ba} ' – hashtpaa