sed — 스트림 텍스트 치환
Linux / 자동화 및 예약 작업 / sed.html
💬 "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를 백업과 함께 일괄 치환하고 검증한 결과입니다.

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