s/from/to/ 엔진
sed는 입력을 한 줄씩 읽어 작은 편집 프로그램을 적용하고 결과를 출력해. 가장 자주 쓰는 형식은 문자열을 치환하는 s/pattern/replacement/야. 반복적인 찾아 바꾸기를 명령줄에서 재현할 수 있다는 게 핵심이야.
치환
sed 's/foo/bar/': 각 줄에서 첫 번째 일치만 바꿔.sed 's/foo/bar/g': 각 줄의 모든 일치를 바꿔.sed 's/foo/bar/I': GNU sed에서 대소문자를 무시해.sed 's|/usr/local|/opt|g': 경로 안의 슬래시와 겹치지 않도록 구분자를 다른 한 글자로 바꿔.sed -E 's/(foo|bar)/[\1]/g': 확장 정규식의 첫 캡처 그룹을\1로 다시 사용해.
다른 명령
sed '/pattern/d': 일치하는 줄을 삭제해.sed -n '5,10p' file: 기본 출력을 끄고 5번부터 10번 줄까지만 출력해.sed '$d' file: 마지막 줄을 삭제해.sed '1i\\ header' file: 첫 줄 앞에 텍스트를 넣어.
파일을 직접 고치는 편집
sed -i는 파일 자체를 다시 써. BSD sed를 쓰는 macOS에서는 백업 확장자 위치에 빈 인자가 필요하므로 sed -i '' 's/foo/bar/g' file처럼 실행해. GNU sed에서는 sed -i 's/foo/bar/g' file을 써. 두 구현의 차이를 없애고 싶다면 brew install gnu-sed로 GNU sed를 별도로 설치하고, 어느 명령 이름을 쓸지 스크립트에서 분명히 정해.
sed, awk, perl을 고르는 기준
sed는 줄 단위 치환, awk는 필드를 알아보는 처리, perl -pe는 전방 탐색 같은 강한 정규식이 필요할 때 잘 맞아. 셋 가운데 sed가 가장 작고 여러 환경으로 옮기기 쉬워.
sed 문법은 구현마다 달라
GNU sed와 BSD sed는 제자리 편집 옵션과 확장 정규식 옵션이 달라. 한 머신에서 성공한 sed -i 예제를 그대로 배포하지 말고 설치된 구현의 도움말을 확인해. 중요한 파일은 먼저 표준 출력으로 결과를 살펴보고 백업과 diff를 남겨.
한 줄 치환은 구조를 이해하지 못해
sed는 텍스트 패턴만 바꿀 뿐 JSON, YAML, HTML의 중첩과 이스케이프 규칙을 몰라. 구조화된 형식은 파서를 사용하고, sed는 줄 단위 계약이 분명한 입력에만 써. 짧은 명령보다 형식을 손상하지 않는 것이 우선이야.