ioerror

sed 사용법 및 옵션 - 비대화형 스트림 에디터를 활용한 텍스트 변환 및 편집 본문

OS

sed 사용법 및 옵션 - 비대화형 스트림 에디터를 활용한 텍스트 변환 및 편집

반응형

sed - Stream Editor

sed는 텍스트 스트림을 한 줄씩 읽어와 지정한 규칙(스크립트)에 따라 편집, 치환, 삭제, 삽입 등의 작업을 수행하는 유닉스/리눅스의 대표적인 비대화형(Non-interactive) 라인 에디터이다. 파일 원본을 직접 열어 수정하지 않고도 입력 스트림이나 파일 내 특정 문자열을 빠르게 변환할 수 있으며, 다른 파이프라인 명령어와의 조합으로 로그 분석 및 데이터 정제 작업에 광범위하게 활용된다.

1. 명령어 용도

  • 사용가능 OS, Shell: All UNIX/Linux linux apple, mac
  • 대용량 텍스트 파일이나 로그 파일 내에서 특정 키워드를 일괄 변경하거나 원치 않는 패턴을 제거할 때 사용된다.
  • 파이프라인(|)으로 전달받은 타 명령어의 출력 결과 중 필요 없는 줄을 삭제하거나 특정 포맷으로 가공하여 후속 처리에 넘길 때 활용된다.

2. 명령어 서식

sed [options] 'script' [input-file...]

3. 명령어 옵션

  • 주요 옵션 소개 테이블
옵션 설명 사용가능 OS 및 쉘
-e script 실행할 sed 편집 스크립트를 지정한다. 여러 개의 -e 옵션을 사용하여 다중 편집 규칙을 적용할 수 있다. All UNIX/Linux
-f script-file 실행할 sed 명령어들이 작성된 스크립트 파일 경로를 지정하여 실행한다. All UNIX/Linux
-i[SUFFIX] 파일을 직접 수정(In-place)한다. 백업 확장자(SUFFIX)를 지정하면 원본 파일의 백업본을 생성한다. GNU Linux <i class="fab fa-linux"></i> BSD/macOS <i class="fab fa-apple"></i>
-n 패턴 스페이스의 자동 출력을 억제하고, p 명령어 등 명시적으로 출력을 요청한 라인만 표시한다. All UNIX/Linux
-E 확장 정규 표현식(Extended Regular Expressions, ERE) 사용을 활성화한다. GNU Linux <i class="fab fa-linux"></i> BSD/macOS <i class="fab fa-apple"></i>
  • 명령어 옵션 사용시 결과 예시
# 파일 내 특정 문자열 일괄 치환 (foo -> bar)
$ sed 's/foo/bar/g' example.txt
# bar is a common word in programming.
# This line contains bar and another bar.

# 5번째 줄부터 10번째 줄까지 지정 삭제 후 출력
$ sed '5,10d' server.log
# [Line 1..4 log entries]
# [Line 11+ log entries]

# 특정 패턴이 포함된 라인만 선택 출력 (-n 및 p 명령어 조합)
$ sed -n '/ERROR/p' app.log
# 2026-07-29 10:15:00 [ERROR] Database connection failed.
# 2026-07-29 10:18:22 [ERROR] Timeout waiting for service.

# 원본 파일 직접 수정 및 백업 파일 생성 (-i 옵션)
$ sed -i.bak 's/http:/https:/g' config.conf
# (출력 없음, config.conf 파일 직접 수정되며 config.conf.bak 백업 생성)
  • s/foo/bar/g: s는 치환(substitute), foo는 찾을 패턴, bar는 바꿀 문자열, g는 행 전체 적용(global)을 의미한다.
  • 5,10d: 5행부터 10행까지 범위 지정을 나타내며, d는 해당 라인 삭제(delete)를 수행한다.
  • -n '/ERROR/p': -n으로 기본 출력을 끄고, /ERROR/ 패턴과 일치하는 행만 p(print)하여 출력한다.
  • -i.bak: 파일 내 텍스트를 즉시 변경하고 원본을 .bak 확장자로 저장한다.

4. 명령어 특이사항(유의사항)

  • GNU sed와 BSD sed(-i 옵션) 차이점: Linux(GNU)에서는 sed -i 's/a/b/g' file 처럼 백업 확장자 없이 사용할 수 있으나, macOS(BSD)에서는 백업 확장자를 비워두려면 sed -i '' 's/a/b/g' file 형태로 반드시 빈 문자열 ''을 인자로 넘겨주어야 하는 차이가 있어 스크립트 이식성 확보 시 주의가 필요하다.
  • 구분자 변경 가능성: 슬래시(/)가 포함된 경로(예: /var/www/html)를 치환할 때 s// 대신 s#old#new#g 또는 s|old|new|g 와 같이 다른 특수문자를 구분자로 사용할 수 있어 가독성을 높일 수 있다.
  • 메모리 효율성: 전체 파일을 메모리에 로드하지 않고 한 줄씩 읽어서 처리하므로, 대용량 로그 파일 편집 시에도 메모리 부족 없이 빠르게 작동한다.

관련 명령어들

  • awk: 텍스트 패턴 검색 및 정교한 필드 기반 데이터 처리를 수행하는 다목적 프로그래밍 언어 도구이다.
  • grep: 파일이나 표준 입력에서 특정 정규 표현식 패턴에 일치하는 라인을 검색하여 출력한다.
  • cut: 각 라인에서 특정 필드나 바이트/문자 위치를 기준으로 잘라낸다.
  • tr: 표준 입력의 문자들을 1:1로 치환하거나 삭제한다.

https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference

 

UNIX & Linux Command Reference

유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하

ioerror.tistory.com

 

 

 

반응형
Comments