특정 문자열을 치환하는 쉘스크립트

2006/09/08 14:33

출처 블로그 > 영혼의 소리...카리스마 그리고 이성
원본 http://blog.naver.com/kill_9/100004874536

#!/bin/bash


# 이 스크립트는 해당 디렉토리 이하, 확장자가 txt인 파일의 문자열을 교체한다.

# 서브사이드 스크립트(Server Side Script)의 일괄적인 문자열 교체에 유용하다.


target_dir="/www/htdocs"

target_files=$(find "$target_dir" -name "*.txt" -type f)


# shell 내부변수 조정, 단, bash 버전 2.xx 이상에선 아래의 코드를 사용하지 않아도 된다.

IFS='

'

from_str='원본 문자열'

to_str='치환할 문자열'


# 루프로 해당 디렉토리내의 모든 파일(/www/htdocs 내의 *.txt 파일)을 조사한다

# 파일에 일치하는 패턴이 있으면 치환, redirection 시켜 새로운 파일(파일명.newfile)을 만든다

# 새로운 파일을 기존의 파일명으로 바꾼다.

# 하나의 파일 실행이 끝나면 특정 메세지를 띄운다.

for file in $target_files ; do

  result=$(grep "$from_str" "$file")

  if [ X"$result" != "X" ] ; then

     sed "s;${from_str};${to_str};g" "$file" > ${file}.newfile

     mv -f "${file}.newfile" "$file"

     echo "Changed String : $file"

  fi

done

exit 0

find 로 문자열 찾아서 치환

* 리눅스에서 파일 검색
- Tips/Linux | 2006/06/10 10:17
문자열찾기 방법 1 - 영어만 주로 가능
grep -rw "찾는문자열" ./

문자열찾기 방법 2 - 대/소문자 구분 안하고 검색
grep -i -l "찾는문자열" * -r 2> /dev/null

문자열찾기 방법 3 - 한글, 영어 모두 가능
find . -exec grep -l "찾는문자열" {} \; 2>/dev/null

문자열찾기 방법 4 - 한글,영어, 대소문자 안가리고 검색
find . -exec grep -i -l "찾을문자열" {} \; 2>/dev/null

문자열찾은 후 치환
find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null

파일명 찾기
find / -name 파일명 -type f

파일명 찾기(대소문자 구별없음)
find / -iname 파일명 -type f

디렉토리 찾기
find / -name 파일명 -type d

디렉토리 찾기(대소문자 구별없음)
find / -iname 파일명 -type

xargs - 명령 결과를 다른 명령의 아규먼트로 넣기
find . -name "*py" -print | xargs  -i -t cp {} backup

응용은 요고와 같다
find ./* -exec grep -l '찾는문법' {} \; | xargs -i -t perl -pi -e 's/찾을문자열/바꿀문자열 {}