codex 나 기타 다른 coding agent들을 사용하다보면 sed -i ..하면서 하는게 나올건데, 알고 보니 엄청 많이 쓰는 명령어더라
sed -n '1,3p' :1~3 행만 출력해
뭐 이런식으로 그래서 간단하게 정말 자주쓰는 옵션만 설명해보려고 한다. -i, -n, -
sed는 stream editor의 약자입니다.
즉, 텍스트 파일을 한 줄씩 스트림 형태로 읽어와, 지정된 패턴(정규표현식 등)에 따라 수정, 삭제, 치환을 수행합니다.
파일 전체를 메모리에 올리지 않고 처리하므로 빠르고 비파괴적(기본적으로 원본을 직접 수정하지 않음)입니다.
| 옵션 | 의미 | 특징 및 설명 |
|---|---|---|
-e | 여러 명령을 순차적으로 실행 | sed -e 's/foo/bar/' -e 's/bar/baz/' file 처럼 여러 치환을 연결 |
-i | 원본 파일을 직접 수정(in-place) | 예: sed -i 's/foo/bar/' file.txt → file.txt 내용이 직접 바뀜 |
-n | 자동 출력 억제 | 출력은 p 명령을 써야만 함 (sed -n '2p' file → 2번째 줄만 출력) |
-r 또는 -E | 확장 정규표현식 사용 | 괄호, +, ? 등의 확장문법을 \ 없이 사용 가능 |
-f | 명령을 외부 스크립트 파일로부터 읽음 | 예: sed -f script.sed file |
sed 's/foo/bar/' sample.txt
→ 각 줄에서 첫 번째 ‘foo’만 ‘bar’로 바꿈.
모든 ‘foo’를 바꾸려면 g 플래그 추가:
sed 's/foo/bar/g' sample.txt
sed -n '5p' sample.txt
→ 5번째 줄만 출력. (-n 옵션과 p 명령 조합)
sed -n '/error/p' log.txt
→ ‘error’가 포함된 줄만 표시.
-i)sed -i 's/http:/https:/g' urls.txt
→ 파일 내 모든 http:를 https:로 직접 수정.
백업을 남기려면:
sed -i.bak 's/http:/https:/g' urls.txt
→ 원본은 urls.txt.bak로 저장.
sed '2,5d' data.txt
→ 2~5번째 줄 삭제하고 결과 출력.
-i(in-place), -n(no auto print), -r/-E(regex), -e(multi-cmd), -f(script file)sed는 정규표현식의 힘을 기반으로 한 "자동화된 텍스트 변환기"입니다.
쉘 스크립트에서 변수 치환이나 설정파일 패치 작업을 할 때 없어서는 안 될 도구죠.
한 번 익숙해지면 awk와 함께 UNIX 텍스트 처리의 양날검이 됩니다.