하츠의 꿈

모든 파일 내의 문자 치환(바꾸기) - find/perl 이용 본문

엔지니어스 마인드/Shell

모든 파일 내의 문자 치환(바꾸기) - find/perl 이용

명섭이 2009. 4. 27. 09:16
개발을 하거나 시스템 관리를 하다 보면 특정 디렉터리의 모든 파일 내의 특정 문자를 다른 문자로 치환해야 하는 일이 종종 생긴다.

여러가지 방법으로 치환할 수 있겠지만, 나는 find 와 perl 을 이용하여 이 방법을 해결하곤 하였다.
단, 이 명령은 오류가 없는 이상 화면에 출력하지 않으며, 현재 위치를 잘못 지정하면 큰 낭패를 볼 수 있으므로 주의해야 한다.

아래에서 볼 수 있듯이 perl을 사용하며 "찾을 문자열"이나 "바꿀 문자열"부분에는 정규표현식을 시용할 수 있다.


기본 명령
  # find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;

  - find . : 현재 위치와 그 하위 디렉터리의 모든 내용을 출력한다.
  - -exec : 출력하는 각 줄의 내용을 그 다음 명령에 넘겨준다.
  - perl -pi -e 's/찾을문자열/바꿀문자열/g : "g" 옵션은 모두 다 변경. 이 옵션이 없으면 한줄에 처음 일치한 문자열 만 변경한다.
  - {} : find 명령으로 화면에 출력할 한줄
  - \; : 한줄이 끝난다는 의미를 넣어준다.

1. 실제 작업 화면
  1) find 와 grep 을 이용하여 바꿀 문자(itpass)를 확인한다.


  2) find 와 perl 을 이용하여 치환(itpass -> 한컴IT패스)한 후 다시 grep을 이용하여 확인한다.

아주 간단하게 모든 "itpass"라는 문자를 "한컴IT패스"로 치환된 것을 알 수 있다.
Comments