sed를 사용해서 문자열 바꾸기

taeyeung의 이미지

제가 c로 된 프로그램을 고칠일이 있는데요.

strncpy( aaa, bbb, 10); 를 strcpy( aaa, bbb);로 바꾸려고 합니다.

작업 환경은 Windows 환경이고 도스 창에서 GNU sed ver 3.02의

프로그램으로 배치 파일을 만들려고 합니다.

정규 표현식을 다루는 실력이 짧아 그러니 도와 주세요.

처로의 이미지

cat foo.c | sed -e 's/strncpy( aaa, bbb, 10);/strncpy( aaa, bbb);/' > bar.c

그런데 이런 것도 정규표현식이라고 할 수 있을지... ^^;

taeyeung의 이미지

sed 에서는 백 레퍼런스 기능을 못 사용하겠더군요.

그래서 python으로 구현을 해 보았습니다.

>>> import re
>>> text = "aaaW( 1, aaa, bbb)"
>>> re.sub( "(\w+)W\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)", "\\1( \\2, \\3)", text)

원래의 문자열 aaaW( 1, aaa, bbb)
결과 문자열 aaa( 1, aaa)

taeyeung의 이미지

aaa.txt에

strncpy( aaa, bbb, 10 )을 strcpy( aaa, bbb) 형태로 바꾸는 방법

입니다.

sed -e "s/strncpy/strcpy/g" -e "s/,[ ]*10[ ]*//g" aaa.txt

sed -e "/strncpy( aaa, bbb, 10)/strcpy( aaa, bbb)/g" aaa.txt

처럼 할 수 없었던 이유는 매번 aaa와 bbb가

다르더라도 치환이 가능하게 하기 위해서 입니다.