본문 바로가기

개발/리눅스

find, sed로 문자열 치환하기

반응형

저번 글에서는 find + perl 조합으로 문자열을 치환하는 내용을 봤는데요.

이번에는 find + sed 조합으로 문자열을 치환하는 방법을 알아보겠습니다.

 

 

 

Find + sed 조합으로 변경하기

find ./ -type f -iname "파일명" -exec sed -i 's/찾을단어/바꿀단어/g' {} \;

기본 명령어는 위와 같은 명령어를 사용합니다.(-iname 옵션으로 대소문자 무시)

 

아래와 같은 파일들이 있습니다.(find + perl 떄와 과 같은 파일들)

# 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

# cat PlayOn.php
playon.TISTORY.com

이제 내용을 변경 해 보죠.

 

 

 

 

단어 치환하기

# find ./ -type f -iname "*.php" -exec sed -i 's/tistory/kakao/g' {} \;

find + perl 때와 마찬가지로 .php의 확장자를 가진 모든 파일의 내용을 tistory에서 이번에는 kakao로 변경했습니다.

확인 해 보겠습니다. (-iname 옵션을 줘서 파일의 대소문자 무시)

# cat playon.php
playon.Tistory.com

# cat PlayOn.php
playon.TISTORY.com

오잉? 바뀌지 않았습니다. 치환할 단어도 대소문자를 구분하네요.

대소문자를 구분하지 않고 치환하도록 옵션을 추가 합니다. s/tistory/kakao/g 부분에서 i 옵션을 추가하면 됩니다.

s/tistory/kakao/ig 이렇게요.

 

# find ./ -type f -iname "*.php" -exec sed -i 's/tistory/kakao/ig' {} \;

명령어를 입력하고 다시 확인 해 봅니다.

 

 

# cat playon.php
playon.kakao.com

# cat PlayOn.php
playon.kakao.com

모두 명령어에 입력한대로 단어가 바뀌었네요.

(참고로 find + perl 도 i 옵션을 넣으면 똑같이 단어에서 대소문자 구문을 하지 않습니다.)

 

 

 

 

find + perl로 문자열 치환하기

 

find, perl로 문자열 치환하기

가끔 혹은 종종 많은 파일에서 문자열을 변경해야 할 일이 있습니다. 홈페이지 내 모든 파일에서 style.css를 style2.css로 변경을 해야 한다던지, 도메인 주소가 변경되어 변경해야 한다던지 하는 일

playon.tistory.com

 

 

 

반응형