sed 스트림 편집기 활용법

개요

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 옵션으로 확장 정규표현식을 활용하면 가독성이 향상된다

태그: sed linux cli text-processing regular-expression

6월 28일 18:52에 게시됨