← 글 목록

notes

Shell - SED

Shell sed 명령어의 검색·치환 문법과 실무 사용 예 메모.

sed (Stream Editor)는 텍스트 파일을 처리하는 강력한 유닉스/리눅스 명령어입니다. 주요 개념과 사용법을 설명해드리겠습니다:

  • 기본 문법:
sed [옵션] '명령어' 파일명
  • 주요 옵션:
-i  # 파일을 직접 수정 (in-place)
-n  # 자동 출력 억제
-e  # 여러 명령어 실행
-f  # 스크립트 파일에서 명령어 읽기
  • 자주 사용되는 명령어:
# 치환 (가장 많이 사용)
sed 's/찾을문자열/바꿀문자열/' 파일명

# 예시
sed 's/hello/world/' test.txt  # hello를 world로 변경

# 특정 줄만 수정
sed '5s/hello/world/' test.txt  # 5번째 줄만 수정

# 모든 줄 수정
sed 's/hello/world/g' test.txt  # g 옵션으로 모든 매칭 변경
  • 실제 사용 예시:
# Nginx 설정 파일에서 포트 주석 처리
sed -i 's/^server 127.0.0.1:13003;/#server 127.0.0.1:13003;/' nginx.conf

# 여러 줄 수정
sed -i 's/old/new/g' file.txt

# 특정 패턴 이후 줄 삭제
sed '/pattern/,$d' file.txt
  • 정규식 사용:
# 공백으로 시작하는 줄 수정
sed 's/^\\s*server/#server/' nginx.conf

# 특정 포트 번호만 수정
sed 's/:13003;/:13004;/' nginx.conf
  • 여러 명령어 조합:
# 여러 변경사항 적용
sed -i -e 's/old1/new1/g' -e 's/old2/new2/g' file.txt
  • 백업 생성:
# 수정 전 백업 생성
sed -i.bak 's/old/new/g' file.txt
  • 실제 Nginx 설정 수정 예시:
# 포트 주석 처리
sed -i 's/^\\s*server 127.0.0.1:13003;/#server 127.0.0.1:13003;/' nginx.conf

# 포트 주석 해제
sed -i 's/^#server 127.0.0.1:13003;/server 127.0.0.1:13003;/' nginx.conf
  • 주의사항:
  • i 옵션은 파일을 직접 수정하므로 주의 필요
  • 백업을 만들어두는 것이 안전
  • 정규식 사용 시 특수문자 이스케이프 필요
  • 권한 문제 발생 가능 (sudo 필요할 수 있음)
  • 디버깅:
# 변경사항 미리보기
sed 's/old/new/g' file.txt

# 실제 변경
sed -i 's/old/new/g' file.txt

이러한 sed 명령어는 특히 설정 파일 수정이나 로그 처리에 매우 유용합니다. 특히 Nginx 설정 파일 수정과 같은 시스템 관리 작업에서 자주 사용됩니다.