sed 사용법

how to use sed

sed는 “스트림 에디팅”의 약어로 sort나 grep과 유사하나 생각보다 많은 일을 할 수 있는 유틸리티이다. (일종의 자동화된 편집기라고 보면 된다.) sed의 문법은 다음의 개요를 가진다.

$ sed [-n] [-e script] [-f sfilename] [filenames]

단, -e옵션은 따로 붙이지 않아도 스크립트로 인식한다.

$ sed script filename

그 외에 몇 가지 옵션이 있다. (쓰일 것 같은 것만 기재. 전체 문서는 매뉴얼 문서 참고)

* `-n` : 처리되는 문장을 표준출력을 통해 보여주지 않음. (= --slient)
* `-e` SCRIPT : 스크립트 명령을 추가함
* `-f` SCRIPTFILE: 스크립트를 파일로부터 읽어옴
* `-i` (--in-place): 변경 내용을 원본파일에 저장함
* `-l` N : 한줄의 길이를 제한
* `-s` : 각 입력 파일들을 별개의 파일로 구분함 (원래는 복수의 파일을 받으면 이 전체를 스트림으로 인식함) 이를 이용하면 여러 파일을 하나로 합칠 수 있다.

이 중 -e, -f가 붙으면 원래 스크립트는 무시된다. (파일 이름으로 인식함)

스크립트는 다음과 같은 문법을 가진다.

[address [, address]] function [ arguments ]

address는 기본적으로 줄 번호이며, 이에 대해서 특정 기능을 실행하게 된다. 또한 파일을 바로 수정하여 저장하지 않는다.

Address

숫자가 되는 경우, 해당 라인이며, 패턴인 경우 정규식과 비슷한 형태의 패턴 매칭을 수행, 결과가 있는 경우 후술된 기능을 실행한다.

  • ^ : 줄의 시작
  • $ : 줄의 끝
  • . : 한 글자
  • (c)* : 문자 c가 0번 이상 매칭
  • (c)? : 문자 c가 0,1번 매칭
  • (c){m, n}
  • (expression): 그룹

예제

다음은 지정된 파일의 전체 라인을 삭제한다.

$sed d usopen

특정 줄 범위는 다음과 같이 삭제한다.

$sed 6,15d usopen

첫줄만 남기고 나머지를 삭제하는 명령은 다음과 같다.

$sed 2,$d usopen

usopen이라는 파일의 내용이 다음과 같다면…

$ cat usopen
     1  Ernie Els -- -4     -4    0
     2  Colin Montgomerie -- -3     -4    1
     3  Tom Lehman -- -2     -4    2
     4  Jeff Maggert -- +1     -4    5
     5  Bob Tway -- +2     -4    6
     6  Olin Browne -- +2     -4    6
     7  Jim Furyk -- +2     -4    6
     8  Tommy Tolles -- +2     -4    6
     9  Jay Haas -- +2     -4    6
    10  Scott McCarron -- +3     -4    7
    11  Scott Hoch -- +3     -4    7
    12  David Ogrin -- +3     -4    7
    13  Loren Roberts -- +4     -4    8
    14  Stewart Cink -- +4     -4    8
    15  Billy Andrade -- +4     -4    8
    16  Bradley Hughes -- +5     -4    9
    17  Jose Maria Olazabal -- +5     -4    9
    18  Davis Love III -- +5     -4    9
    19  Nick Price -- +6     -4    10
    20  Lee Westwood -- +6     -4    10

다음 명령은 줄 번호가 3-9, 그리고 13-19 영역을 삭제한다. (각 라인에 줄번호가 들어있으니)

> sed '/^.....3/,/^.....9/d' usopen

+가 포함된 줄을 삭제한다.

>sed '/+/d' usopen