개요
sed는 텍스트 스트림을 필터링하고 변환하는 강력한 도구로, 파일 내용을 수정하거나 파이프라인에서 데이터를 가공할 때 활용된다. 비대화형 편집 환경에서 특히 유용하며, 대량의 로그나 설정 파일을 자동화 처리하는 데 필수적이다.
핵심 문법 구조
기본 치환 패턴은 다음과 같이 구성된다:
sed [옵션] '명령어' 대상_파일
치환 명령의 구성 요소:
- 구분자:
s뒤에 오는 문자(기본/)로 패턴과 교체 문자열을 구분 - 플래그:
g(전역 치환),p(매칭 라인 출력),n(치환 후 다음 명령으로 이동) 등
주요 옵션
| 옵션 | 설명 |
|---|---|
-i | 원본 파일 직접 수정(in-place), 백업 확장자 지정 가능 |
-r | 확장 정규표현식(ERE) 사용, 이스케이프 문자 감소 |
-n | 자동 출력 억제, p 명령으로 명시적 출력 필요 |
-e | 다중 명령어 연결, 파이프라인 결과 후체에 유용 |
실전 예제
기본 치환
IP 주소의 첫 번째 옥텟을 변경:
$ cat hosts.txt
192.168.1.1
192.168.1.2
192.168.1.3
$ sed -i 's/192/172/g' hosts.txt
$ cat hosts.txt
172.168.1.1
172.168.1.2
172.168.1.3
특수 문자 치환
문자 n을 실제 줄바꿈으로 변환:
$ cat data.txt
192.168.3.1n192.168.3.2n192.168.3.3n
$ sed -i -r 's/n/\n/g' data.txt
$ cat data.txt
192.168.3.1
192.168.3.2
192.168.3.3
네트워크 장비 라우팅 테이블 파싱
다음 Cisco Nexus 스타일 라우팅 정보를 정형화한다:
10.4.3.21/32, ubest/mbest: 2/0, attached
*via 10.4.3.21, Lo0, [0/0], 1y38w, local
*via 10.4.3.21, Lo0, [0/0], 1y38w, direct
10.224.3.132/32, ubest/mbest: 2/0
*via 10.4.132.130, Vlan1001, [110/32], 29w0d, ospf-65010, intra
*via 10.4.132.162, Vlan170, [110/32], 21w2d, ospf-65010, intra
9.8.0.0/16, ubest/mbest: 1/0
*via 10.4.132.13, [6/0], 22w5d, bgp-65010, external, tag 65000
네트워크/마스크 추출
$ grep ubest/mbest route.txt | sed -r -e 's/,.*1\/0//' -e 's/,.*2\/0.*/\n/'
10.4.3.21/32
10.224.3.132/32
9.8.0.0/16
넥스트홑 주소 추출
$ grep via route.txt | sed -e 's/.*via //' -e 's/,.*//'
10.4.3.21
10.4.3.21
10.4.132.130
10.4.132.162
10.4.132.13
관리 거리(Administrative Distance) 추출
$ grep via route.txt | sed -e 's/.*\[/'' -e 's/\/.*//'
0
0
110
110
6
메트릭(Cost) 추출
$ grep via route.txt | sed -e 's/.*\[/'' -e 's/\].*//' | awk -F"/" '{print $2}'
0
0
32
32
0
자동화 스크립트
위 분석 결과를 개별 파일로 저장:
#!/bin/bash
SRC="route.txt"
grep ubest/mbest "$SRC" | sed -e 's/,.*1\/0//' -e 's/, attached//' -e 's/,.*2\/0.*/\n/' > prefix_mask
grep via "$SRC" | sed -e 's/.*via //' -e 's/,.*//' > nexthop_addr
grep via "$SRC" | sed -e 's/.*\[/'' -e 's/\/.*//' > admin_distance
grep via "$SRC" | sed -e 's/.*\[/'' -e 's/\].*//' | awk -F"/" '{print $2}' > metric_cost
활용 팁
-e옵션으로 여러 치환 규칙을 연결할 때, 파이프라인 결과물에 적용하면 이스케이프 처리가 단순해진다- 정규표현식 메타문자(
[,],/등)를 리터럴로 사용하려면 적절한 이스케이프 필요 - 복잡한 패턴은
-r옵션으로 확장 정규표현식을 활용하면 가독성이 향상된다