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 가 "stream editor" 의미. 빵과 버터가 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/'                  # piped 입력

흔한 플래그:

  • g — 각 줄 다 치환 (기본은 줄당 첫 번째)
  • i — case-insensitive (GNU sed)
  • 2, 3... — 줄당 N번째 등장만 치환

BSD vs GNU sed

macOS 가 BSD sed; Linux 가 GNU sed. 중요한 차이:

  • -i in-place 편집: BSD 가 extension 인자 필수 (빈 거라도: sed -i '' 's/old/new/' file). GNU 는 그냥 sed -i 's/old/new/' file.
  • Extended regex: BSD 가 -E 사용, GNU 도 -r 받음. -E 가 둘 다 동작 — 그거 사용.
  • 백슬래시 해석: 치환에서 \n, \t 처리에 미묘한 차이.

크로스 플랫폼 스크립트엔 gsed (GNU sed, brew install gnu-sed) 또는 Python.

캡처 그룹

sed BRE (기본) 에서 그룹이 백슬래시 escape 필요: \(...\). ERE 위한 -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' 포맷으로, in place 변환. 먼저 복사본에 테스트.

Progress

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

댓글 0

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

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