준호씨의 블로그

쉘 커맨드라인 명령어(sed)로 텍스트 본문 문자 바꾸기. 설정을 손쉽게 바꾸기 본문

IT이야기

쉘 커맨드라인 명령어(sed)로 텍스트 본문 문자 바꾸기. 설정을 손쉽게 바꾸기

준호씨 2018. 7. 31. 22:26
반응형

apache httpd.conf 의 특정 내용을 바꾸고 싶다거나, sendmail.cf 의 특정 설정만 바꾼다던지 하고 싶을 때가 있다.

설정파일은 텍스트 파일이기 때문에 sed 커맨드를 이용하면 손쉽게 바꿀 수 있다.

아래와 같이 하면 some.conf 라는 파일의 DebugLevel=old 가 DebugLevel=new 로 바뀌게 된다.

sed -i 's/DebugLevel=old/DebugLevel=new/g' some.conf
  • sed 는 Stream EDitor 라는 유틸이다.
  • -i 옵션은 in-place 의 의미로, 원본 파일에다가 바로 수정을 하겠다는 의미이다.
  • s/old/new/g 에서
    • s 는 substitute 라고 내용을 바꿀 때 쓰는 커맨드이다.
    • old 는 찾으려는 원본 문자인데, 정규표현식으로 작성한다.
    • new 바뀔 문자이다.
    • g 는 global 의 의미로 전체 내용을 대상으로 한다는 의미이다. old 가 여러개가 있으면 모두 다 바꾼다는 말이다.
  • some.conf 는 텍스트 파일명이다.

부연설명

설정을 손쉽게 바꾼다는게 이상하게 들릴 수 있다. vim 에서도 :%s/old/new/g 로 바꿀 수도 있고, 바꿀 갯수가 몇개 안되면 직접 수정할 수도 있다.

그런데 만약 파일이 여러개라면? 서버가 여러대라면? 하나하나 들어가서 바꾸기도 번거롭고 직접 타이핑을 하다보면 오타를 낼 수도 있다.

커맨드는 한번만 치고 ansible 같은 유틸로 여러 서버에 한번에 명령어를 날린다거나, 파일명만 바꿔가며 여러 파일들의 설정을 동일하게 수정 해 줄 수 있다.

참고

Find and replace text within a file using commands

반응형
Comments