find 명령어를 사용하여 파일의 내용을 일괄적으로 특정 내용으로 변경하는 방법. 라는 글에서 find 명령어로 파일의 내용을 일괄변경하는 방법에 대해서 언급한 적이 있는데요. 오늘도 수천개의 파일의 내용을 동시변경할 일이 있어서 하던대로 했더니 이상한 문법 에러를 밷으면서 안되더군요.

그래서 뭐가 달라졌나 봤더니.. 바꿀 대상 문자열에 ' (홑따옴표) 와 % 기호가 있다는 것이 달라진 점이더군요. 일단 /, ", % 는 앞에 \ 를 붙여주니 해결이 되었는데, ' 는 앞에 \ 를 붙여주어도 해결되지 않았습니다. 조금 삽질을 하다가.. 아마 전체 문자열을 둘러싸고 있는 기호가 홑따옴표라서 그렇지 않을까.. 하고 생각하고 대상 문장을 둘러싸는 기호를 홑따옴표에서 겹따옴표로 바꿔주고 ' 앞에 \ 를 붙여주니 잘 실행되네요.

find ./ -name "*.htm" -exec perl -pi -e "s/원본문자열/바뀔문자열/g" {} \;

혹시나 같은 이유로 삽질하시는 분이 계실까봐 올려봅니다. 바뀔문자열에 ' (홑따옴표) 가 포함되어 있다면 문장 전체를 둘러싸는 기호를 " (겹따옴표) 로 바꾸면 됩니다.
2009/04/30 13:25 2009/04/30 13:25

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다