sed — 스트림 텍스트 치환

Linux / 자동화 및 예약 작업 / sed.html

자동화 및 예약 작업원문등록 2026-10-18

💬 "sed 명령어"

sed는 텍스트를 흐름으로 처리해 치환·삭제를 합니다. 설정 파일 일괄 변경에 자주 씁니다.

-i로 파일을 직접 수정하며, 실수 방지를 위해 백업 확장자를 함께 쓰는 것이 좋습니다.

  • 개념: 입력 스트림에서 패턴에 맞는 부분을 바꾸거나 지웁니다.
  • s///: 치환 명령의 기본 형식입니다.
  • -i: 파일을 직접 수정합니다.
  • -n + p: 특정 줄만 출력합니다.

자주 쓰는 옵션

옵션설명
-i.bak수정 전 원본을 .bak으로 백업
s/old/new/g모든 일치를 치환
-E확장 정규식을 사용
-n '/패턴/p'패턴에 맞는 줄만 출력

필수 명령어 조합 3가지

  • sed -i.bak 's/10.0.0.5/10.0.0.9/g' /etc/app/config.yml — 설정의 IP 일괄 변경(백업 포함)
  • sed -n '/^server_name/p' /etc/nginx/nginx.conf — 특정 설정 줄만 추출
  • sed '/^#/d;/^$/d' /etc/app/config.yml | head — 주석·빈 줄 제거해 보기

💬 "이 작업을 되돌리는 방법까지 포함해서 예시 만들어줘"

실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.

1단계 · 현재 값 확인

바꾸기 전에 대상 문자열을 확인합니다.

grep -n '10.0.0.5' /etc/app/config.yml

2단계 · 치환(백업 포함)

-i.bak으로 원본을 남기며 치환합니다.

sed -i.bak 's/10.0.0.5/10.0.0.9/g' /etc/app/config.yml

3단계 · 검증

결과와 서비스 반영을 확인합니다.

grep -n '10.0.0.9' /etc/app/config.yml && systemctl restart myapp

실무에서는 이렇게 씁니다

1. 설정 IP 교체

상황 — DB 서버 이전으로 설정의 IP를 바꿉니다.

sed -i.bak 's/10.0.0.5/10.0.0.9/g' /etc/app/config.yml

결과 — 모든 참조가 새 IP로 바뀌고 .bak에 원본이 남습니다.

포인트 — 치환 전 grep으로 대상 개수를 확인하면 누락/과다를 막습니다.

2. 주석 제거로 설정 비교

상황 — 실제 적용되는 설정만 보고 싶습니다.

sed '/^#/d;/^$/d' /etc/nginx/nginx.conf | head -30

결과 — 주석과 빈 줄이 제거된 실제 설정이 보입니다.

포인트 — 원본을 수정하지 않으므로 안전하게 확인할 수 있습니다.

주의할 점

  • -i는 파일을 직접 바꿉니다. 백업 확장자를 꼭 붙입니다.
  • 치환할 문자열에 /가 들어가면 구분자를 바꿉니다(예: s|a|b|g).
  • 정규식 특수문자는 이스케이프가 필요합니다.

실제 실행 화면

설정 IP를 백업과 함께 일괄 치환하고 검증한 결과입니다.

sed 명령어 실행 결과: 설정 일괄 치환

실제 운영 중인 서버

이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.