본문 바로가기
C.W.K.
Stream
Lesson 08 of 10 · published

sed — Stream Editor

~10 min · sed, shell, substitution

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

sed는 줄 단위 치환에 강해

기본 형태는 sed 's/pattern/replacement/flags'야. 각 입력 줄에서 패턴을 찾고 새 문자열로 바꿔.

sed 's/pattern/replacement/g' file.txt
sed -E 's/pattern/replacement/g' file.txt   # ERE 문법
echo 'hello' | sed 's/h/H/'                  # 파이프 입력

g를 붙이면 한 줄의 모든 매칭을 바꾸고, 붙이지 않으면 첫 매칭만 바꿔. 숫자 23을 쓰면 그 줄의 둘째나 셋째 매칭만 고를 수 있어. GNU sed의 i는 대소문자를 무시하는 확장이야.

macOS와 Linux의 sed는 같은 명령도 조금 다르게 받아

  • 제자리 편집: BSD sed는 sed -i '' 's/old/new/' file처럼 백업 확장자 인수를 요구해. GNU sed는 sed -i 's/old/new/' file로 쓸 수 있어.
  • 확장 정규식: 두 환경에서 함께 쓸 스크립트라면 -E를 사용해.
  • 치환 문자열: \n이나 \t 같은 백슬래시 해석은 구현에 따라 차이가 날 수 있어.

여러 운영체제에서 같은 결과가 꼭 필요하다면 해당 환경에서 명령을 시험하거나 Python 같은 한 구현으로 통일해.

캡처한 값을 치환 문자열에서 재사용해

기본 BRE에서는 그룹 괄호를 \(...\)처럼 이스케이프해야 하고, -E에서는 평범한 괄호를 사용해. 치환 쪽의 \1, \2가 첫째와 둘째 캡처 값을 가리켜.

Code

sed 예시·bash
# 기본 치환
sed 's/cat/dog/g' file.txt

# ERE 문법 (권장)
sed -E 's/(cat|dog)/animal/g' file.txt

# In-place 편집 (BSD/macOS — 빈 extension 주의)
sed -i '' 's/old/new/g' file.txt

# In-place 편집 (GNU/Linux)
sed -i 's/old/new/g' file.txt

# 캡처 그룹 (ERE)
echo 'order 1138' | sed -E 's/order ([0-9]+)/Order #\1/'
# Order #1138

# 날짜 ISO 에서 MM/DD/YYYY 로 재포맷
echo '2026-05-04' | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\2\/\3\/\1/'
# 05/04/2026

# 패턴 매칭 줄 삭제
sed '/^#/d' config.txt   # 주석 줄 삭제

# 패턴 매칭 줄만 print
sed -n '/ERROR/p' log.txt

External links

Exercise

YYYY-MM-DD 형식의 날짜 열이 있는 CSV 파일 복사본을 준비해. sed의 캡처 그룹과 역참조로 날짜를 MM/DD/YYYY로 바꾸고, 대상 열 외의 값과 원본 파일이 그대로인지 확인한 뒤 제자리 편집을 적용해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.