2012-09-23 2 views
0

구조체를 초기화 할 입력란에 몇 줄이 있습니다. 매번 입력 파일에 다음 줄이 표시됩니다.sed를 사용한 문자열 변환

something1 = (struct something2) {something3, something4};

내가로 변환해야합니다

init_something2 (& something1, something3, something4);

다음 함수를 사용했는데 작동합니다.

sed -e 's/\([a-zA-Z0-9]*\)\s*=\s*(\s*struct\s\([a-zA-Z0-9]*\)\s*)\s*{\s*\([a-zA-Z0-9]*\)\s*,\s*\([a-zA-Z0-9]*\)\s*}\s*;/init_\2(\&\1, \3, \4);/g' 

제 질문은 어떻게 수정해야합니까? 많은 입력에 적용됩니다. 원하는 개수의 입력을 수행하도록 수정할 수 있습니까? 예를 들어 마찬가지로 :

something = (struct something2) {something3, something4, something5, something6..}; 

init_something2(&something1, something3, something4, something5, something6..); 

이 덕분에 많이 (괄호 대 paranthesis에주의)가되어야!

답변

1

확실히. ([^}]*)}을 사용하여 중괄호 앞의 모든 항목을 캡처하면됩니다.

sed -e 's/\([a-zA-Z0-9]*\)\s*=\s*(\s*struct\s\([a-zA-Z0-9]*\)\s*)\s*{\([^}]*\)}\s*;/init_\2(\&\1, \3);/g'