메뉴 닫기

경로 아래 모든 파일에서 문자열 검색 후 변경하기

서버이전등의 작업을 하다보면 웹페이지 소스에서 특정 문자를 찾아 수정해야하는 일이 있습니다.
문제는 그 특정 문자가 들어가있는 파일을 모두 기억할 수가 없어 누락되는경우가 있으며,
일일히 찾아주기 번거로운 면이 있습니다.
 
이에 현재 경로 아래의 모든 파일의 내용을 확인하여 문자열을 변경하는 명령을 짜봤습니다.
 
 
 
for file_name in `grep -r ‘115.68.111.111’ ./* | awk -F: ‘{print $1}’ | uniq`
do
    echo $file_name

    perl -p -i -e “s|115.68.111.111|115.68.222.222|g” $file_name
done

 

위 5줄을 명령창에 붙여넣고 실행하면 현재 경로 아래있는 모든파일에서
115.68.111.111 이라는 부분이 115.68.222.222로 변경됩니다.
그럼 해당 명령을 한구문씩 해석해 보도록 할까요.
 
 for file_name in `grep -r ‘115.68.111.111‘ ./* | awk -F: ‘{print $1}’ | uniq`
-> 우선 grep -r ‘115.68.111.111‘ ./* | awk -F: ‘{print $1}’ | uniq 이 실행됩니다.
     grep 으로 현재경로 아래에 115.68.111.111이라는 문자가 삽입된 파일을 찾고
     awk로 파일명을 추출한 후  uniq로 중복을 제거합니다.
     이후 위에서 추출된 파일명을 for문을 이용해 file_name이라는 변수에 삽입합니다.
 
do – done
-> 두 단어 사이에 명령이 file_name에 삽입되는 파일명 수 만큼 순차적으로 반복됩니다.
    물론 실행될때마다 file_name내용은 순서대로 변경됩니다.
 
echo $file_name
-> 어떤파일을 수정할 지 출력해줍니다.
 
perl -p -i -e “s|115.68.111.111|115.68.222.222|g” $file_name
-> perl 명령을 이용합니다. file_name변수에 있는 파일에서 문자열을 변경해주는 내용입니다.
    각 옵션은 공부겸 찾아보시기 바랍니다. 
 
 
이렇게 간단하게 5줄로 모든 파일에서 문자열을 찾아 치환해주게 되었습니다.
배쉬는 정규명령만 알아도 이렇게 무궁무진하게 활용이 가능합니다.
한번씩 자신이 아는 명령으로 이런 기능을 만들어보면 어떨까요.
 
[polldaddy rating=”7739789″]  

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다