본문 바로가기

grep perl 조합으로 파일내 문자열을 한꺼번에 변경하기

반응형

수천, 수만개의 파일이 있는데 모든 파일을 열어 "korea"를 "대한민국"으로 변경해야한다면 어떻게 해야할까?

아래에 설명한 명령어 한줄이면 간단하게 해결할 수 있다.

단 특정단어를 다른단어로 변경을 하는것이라 "korean"을 "대한민국n" 으로 변경할 수도 있으니

찾는문자열 패턴을 명확하게 지정해야할 것이다.



grep -R --files-with-matches '찾는문자열' ./ --null | xargs -0 perl -pi -e 's/찾는 문자열/변경문자열/'


특정 디렉토리 이하 모든 파일을 검색하여 찾고자하는 문자열을 포함한 파일을 변경문자열로 변경하는 명령어 조합니다.



-R      : 하위 디렉토리까지 검색  

--files-with-matches : 문자열을 포함하는 파일의 이름만 출력

./       : 찾고자하는 디렉토리

--null  : 파일명 대신 0 byte 문자를 출력한다.
           예를들면, grep -IZ 는 유용한 newline 문자대신 각 파일명뒤에 0byte를 출력한다.
           이 옵션은 newline과 같은 유용한 캐릭터를 포함하는 파일명까지도 출력을 명쾌하게 해준다. \
           이 옵션은 임의의 파일명을 처리하는 find -print0, perl -0, sort -z, xargs -0과 같은 명령어와 함께 사용될 수있고
           newline 캐릭터를 포함하는 그 자체로도 사용할 수있다



xargs perl조합을 바로 연결하지 말고 우선 파일목록을 확보한뒤에 백업을 해 두는것도 잊지말자.



mkdir /backup
grep -R --files-with-matches '찾는문자열' ./ > findlist.txt
perl -pi -e 's/^/cp /' findlist.txt
perl -pi -e 's/$/  \/home\/backup/' findlist.txt
sh findlist.txt
grep -R --files-with-matches '찾는문자열' ./ --null | xargs -0 perl -pi -e 's/찾는 문자열/변경문자열/'

반응형

댓글


Copyright ⓒ SmartWeb All rights reserved.