본문 바로가기

개발/리눅스

find, perl로 문자열 치환하기

반응형

가끔 혹은 종종 많은 파일에서 문자열을 변경해야 할 일이 있습니다.

홈페이지 내 모든 파일에서 style.css를 style2.css로 변경을 해야 한다던지, 도메인 주소가 변경되어 변경해야 한다던지 하는 일이..😥

 

그럴때 사용하기 좋은 명령어입니다. 파일 몇개만 바꿔야 하는 경우에는 그냥 에디터에서 변경하는게 빠르고 편할 수 있지만 모든 파일을 찾아 하나하나 바꿔야 한다면.. 나 안해! 😱

 

 

Find + perl 조합으로 변경하기

find ./ -type f -name "파일명" -exec perl -pi -e 's/찾을단어/바꿀단어/g' {} \;

기본 명령어는 위와 같은 명령어를 사용합니다.

 

아래와 같은 파일들이 있습니다.

# ll
total 12
-rw-r--r-- 1 root root 20 2022-07-12 14:59 playon.php
-rw-r--r-- 1 root root 20 2022-07-12 15:00 playon.PHP
-rw-r--r-- 1 root root 20 2022-07-12 14:59 PlayOn.php

 

3개의 파일들 안에는 playon.tistory.com 이라는 내용이 공통으로 있습니다.

# cat playon.php
playon.tistory.com

이제 내용을 변경 해 보죠.

 

 

 

단어 치환하기

# find ./ -type f -name "*.php" -exec perl -pi -e 's/tistory/naver/g' {} \;

.php의 확장자를 가진 모든 파일의 내용을 tistory에서 naver로 변경했습니다.

확인 해 보겠습니다.

# cat playon.php
playon.naver.com

# cat playon.PHP
playon.tistory.com

playon.PHP 파일의 내용은 변경되지 않았네요. 이유는 *.php 소문자 파일만 적용되었기 때문입니다.

이를 해결하려면 -name 옵션대신 -iname 옵션을 사용하면 됩니다.

 

다시 해볼까요?

 

 

대소문자 구문없이 변경하기(-iname 옵션)

# find ./ -type f -iname "*.php" -exec perl -pi -e 's/tistory/naver/g' {} \;

-iname 옵션으로 변경해서 치환했습니다. 다시 확인 해 보겠습니다.

 

# cat playon.PHP
playon.naver.com

대문자 .PHP 확장자도 잘 변경이 되었네요.

 

 

 

 

반응형