--- title: sed — 스트림 텍스트 치환 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 파일을 열지 않고 특정 문자열을 치환·삭제하는 도구. 설정 일괄 변경에 유용. tags: 프로그램, 자동화 및 예약 작업, sed --- **💬 "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 명령어 실행 결과: 설정 일괄 치환](https://games.cursorai.co.kr/assets/sed-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/automation/sed.html