여러 파일의 문자열을 동시에 바꾸기
리눅스 터미널에서 여러 파일에 있는 텍스트 내용을 동시에 바꾸고 싶은 경우가 있습니다. 한 파일을 열어가면서 일일히 바꾸기 명령을 사용할 수도 있겠지만, 파일이 많고 여러 군데 흩어져 있을 경우 작업 시간이 매우 길어지기 때문에 권장되지 않을 수 있습니다.
아래 명령어를 사용하면 여러 텍스트를 한 번에 변경할 수 있습니다.
방법 1 : perl 사용
find . [변경할 파일들이 있는 디렉토리 경로] -exec perl -pi -e 's/[찾을 텍스트]/[바꿀 텍스트]/g' {} \;
- 사용법 :
find
와perl
명령어로 정규식에 의해 텍스트를 변경
먼저 /Path/
에는 변경할 파일들이 존재하는 디렉토리의 위치입니다. 해당 위치에 존재하는 모든 파일을 검색하게 됩니다.
이후 perl 스크립트를 사용하여 정규식에 의해 텍스트 변환을 진행합니다.
여기서 s/Find/Replace/g
는 터미널 텍스트 에디터 vi 또는 vim에서 사용되는 문자열 바꾸기 명령어와도 같습니다.
방법 2 : sed -i 사용
cd [변경할 파일들이 있는 디렉토리 경로] sed -i 's/[찾을 텍스트]/[변경할 텍스트]/g' *
- 사용법 : 변경할 파일이 존재하는 경로에서
sed -i
사용
-i
옵션을 붙이면 반영할 내용이 파일에 즉시 덮어씌워지게 됩니다. 마찬가지로 s/aaa/bbb/g
는 텍스트 에디터에서 사용되는 바꾸기 명령어입니다.
참고자료
- How to replace a string in multiple files in linux command line – https://stackoverflow.com/questions/11392478/how-to-replace-a-string-in-multiple-files-in-linux-command-line