SED(1)

명칭
sed - 스트림 에디터

서식
sed [-Ean] command [file ...] sed [-Ean] [-e command] [-f command_file] [-i extension] [file ...]

해설
sed (은)는, 지정된 파일, 파일이 지정되어 있지 않을 때는 표준 입력을 읽어들여, 지정된 명령 리스트에 따라 입력으로 변경을 더해 변경 결과를 표준 출력에 써 냅니다.

sed 에의 제일 인수로서 단일의 명령을 지정할 수가 있습니다. 복수의 커멘드를 지정할 때는, -e 또는 -f 옵션으로 실시합니다. 어느 쪽의 경우에서도, 입력에 대해서 지정된 명령을, 지정된 순서로 실행합니다.

옵션은 이하대로입니다.

-E  정규 표현을, Basic Regular expression (BRE)가 아니고, 확장 (모던) 정규 표현으로서 해석합니다. re_format(7) 메뉴얼 페이지는, 어느 쪽의 서식도 완전하게 기술하고 있습니다.

-a  통상, “w” 함수의 인수가 되는 파일은, 처리에 앞서 하늘의 파일로서 작성됩니다. -a 옵션을 지정하는 것으로써, “w” 함수가 입력에 대해서 적용될 때까지, 파일의 작성이 지연 됩니다.

-e command
    편집 명령 command (을)를 명령 리스트에 추가합니다.

-f command_file
    파일 command_file 에 기술된 명령을 커멘드 리스트에 추가합니다. 편집 명령은 1 행 마다 기술합니다.

-i extension
    파일을 그 자리에서 편집해, 지정했다 extension 의 백업을 보존합니다. 길이 0 의 extension 하지만 지정되었을 경우, 백업은 보존되지 않습니다. 그 자리에서 편집할 경우에, 길이 0 의 extension (을)를 지정하는 것은 권유받지 않습니다. 디스크 공간이 다해 버렸을 때 등에, 파일이 망가지거나 내용이 일부만으로 되어 버리는 것이 있기 때문입니다.

-n  디폴트에서는, 입력행은, 모든 명령을 적용한 후에 표준 출력에 책 나무 나옵니다. -n 옵션은 이 동작을 금지해, 명시적인 출력 명령 ( “p” 등 )이 적용된 입력만을 출력합니다.

sed 의 명령은 이하의 형식입니다.

    [address[, address]]function[arguments]

최초의 address 의 전과 function 의 전에 공백을 둘 수가 있습니다.

통상 sed (은)는, 입력 파일의 각 행을 개행 코드를 포함하지 않고 패턴 스페이스 에 카피해( “D” 함수의 다음에 패턴 스페이스에 무엇인가 남아 있는 경우를 제외합니다), 순서에 카피된 내용에 적응하는 address 지정을 가지는 명령을 적용해, 패턴 스페이스의 내용을 개행을 부여해 표준 출력에 써내, 패턴 스페이스를 소거한다고 하는 동작을 반복합니다.

몇개의 함수는, 패턴 스페이스의 일부 또는 전부를 보관 유지할 수 있다 hold 스페이스 (을)를 이용합니다. hold 스페이스의 내용은, 이후의 처리에 이용하는 것이 성과

sed 의 address 표기
address 의 지정은 필수가 아닙니다. address 하행 번호 (복수의 입력 파이 르에 대해서는 일련 번호를 이용합니다), 입력의 마지막 행을 나타내는 달러 기호 (“$”) , 문맥 주소 (단락 기호 에 끼워진 정규 표현)의 머지않아인가입니다.

address 지정을 가지지 않는 명령은, 모든 패턴 스페이스를 선택합니다.

1개의 address 지정을 가지는 명령은, 그 address 지정에 매치 한다 모든 패턴 스페이스를 선택합니다.

2 개의 address 지정을 가지는 명령은, address 의 양단을 포함한 범위를 선택합니다. 이 범위는, 1 개째의 address 에 매치 한 패턴 스페이스에서 시작되어, 그 후에 계속되는 2 개째의 address 에 매치 한 패턴 스페이스에서 끝납니다. 2 개째의 address 가, 1 개째의 address 로 선택된 행 번호 이하의 번호인 경우, 1 개째의 address 가 지정하는 행만 선택됩니다. 2 개째의 address 가 문맥 주소인 경우, sed 는, 1 개째의 address 에 매치 한 패턴 스페이스를 2 개째의 address 에 다시 매치 시키려고는 하지 않습니다. sed 는, 선택된 범위의 다음의 행으로부터, 1 개째의 address 에 매치 하는 행의 검색을 재개합니다.

exclamation 함수 (“”)! (을)를 이용하는 것으로, address 그리고 선택되어 있지 않은 범위에 편집 명령을 적용시킬 수도 있습니다.

sed 의 정규 표현
sed 그리고 사용되는 정규 표현은, 디폴트에서는 Basic Regular expression (BRE re_format(7) (을)를 참조)입니다. sed (은)는, -E 플래그를 지정되면(자), 확장 (모던) 정규 표현을 사용 가능합니다. 정규 표현에 가세해 sed 그럼 이하의 확장이 이루어지고 있습니다.

1.  문맥 주소에 대해, backslash (“\”) (와)과 개행 이외의 캐릭터를 정규 표현의 구 절로서 이용하는 것으로 옵니다. 단락 캐릭터의 직전에 backslash를 둔다 일로, 단락 캐릭터를 리터럴로 해석시킬 수가 있습니다. 예를 들어, 콘테키 스토어 드레스 \xabc\xdefx 에 대해, 단락 캐릭터는 “x” 그리고, 2개째의 “x” 하 “x” 그렇다고 하는 캐릭터를 나타냅니다. 따라서, 정규 표현은 “abcxdef” (와)과 해석

2.  escape sequence \n 는, 패턴 스페이스에 파묻힌 개행에 매치 합니다. 그러나, address 와 치환 명령중에 리터럴인 개행을 포함하는 것 (은)는 할 수 없습니다.

sed 의 정규 표현에는, 기본값의 기능이 있습니다. 만약, 정규 표현이 하늘, 즉, 단락만이 지정되었다면, 직전에 이용된 정규표 현이 이용됩니다. 직전의 정규 표현이란, 마지막에 사용된 address 또는 치환 명령중의 정규 표현입니다. 최후와는 실행시의 차례이며, 지정함 명령의 줄과는 다릅니다. 예를 들어, “/abc/s//XXX/” (은)는 패턴 “abc” (을)를 “XXX” 그리고 치환합니다.

sed 의 함수
이하의 명령의 일람에서는, 지정 가능한 최대 address 수를,[0addr], [1addr],[2addrs] 로 표기하고 있습니다. 이것들은, 각각 최대 0, 1, 2 개 의 address 를 지정할 수가 있는 것을 의미합니다.

text 인수의 텍스트는 복수행에 건널 수가 있습니다. 개행의 직전에 backslash (을)를 두는 것으로, 텍스트에 개행을 포함할 수가 있습니다. 그 외의 박스락 슈는 제거되어 직후의 캐릭터가 리터럴로 해석됩니다.

“r” (와)과 “w” 함수는, 옵셔널인 파일명 인수를 취합니다. 파일명은, 함수명의 후에 공백을 두고 나서 지정할 필요가 있습니다. 인수로서 지정되고 파일은, 입력 파일의 처리를 개시하기 전에 작성(또는, 내용을 소거)해

“b”, “r”, “s”, “t”, “w”, “y”, “”!, “”: 함수는, 옵셔널인 인수를 취하는 것이 할 수 있습니다. 이하의 일람에, 어느 인수가 함수명의 후에 공백을 두고 나서 지정해 없으면 안 될까가 기술되어 있습니다.

2개의 함수는 인수로서 함수 리스트를 취합니다. 함수 리스트는, 이하의 형식의 개행으로 단락지어졌다 sed 함수의 나열입니다.

    { function
      function
      ...
      function
    }

“{” 의 전후에 공백을 둘 수가 있습니다. 함수의 전에 공백을 치구일궖 “}” (은)는, 개행의 직후에 둘 필요가 있습니다. “}” 의 직전에 공백을 치 구일도 할 수 있습니다.

[2addr] function-list
    선택된 패턴 스페이스에 함수 리스트를 적용합니다.

[1addr]a\
text
    다음의 입력행을 읽어들이기 직전에 text (을)를 표준 출력에 써냅니다. 이것은 “N” 함수에 의해 실행되는 경우에서도 새로운 반복의 개시시여도 바뀌지 않습니다.

[2addr]b[label]
    지정된 label 를 가진다 “”: 함수에 분기 합니다. label 가 지정함 라고 없는 경우는, 스크립트의 마지막에 분기 합니다.

[2addr]c\
text
    패턴 스페이스를 삭제합니다. address 가 지정되어 있지 않은 경우와 1개만 지정되었을 경우는 text 하지만 표준 출력에 써내집니다. 2개의 address 가 지정되었을 경우는, 선택된 범위의 맨 마지막 줄을 처리한 후에, text 가 표준 출력에 써 출 되어

[2addr]d
    패턴 스페이스를 삭제해, 다음의 반복을 개시합니다.

[2addr]D
    패턴 스페이스의 최초의 개행까지의 부분을 삭제해, 다음의 반복을 개시합니다.

[2addr]g
    hold 스페이스의 내용을 패턴 스페이스에 카피합니다.

[2addr]G
    개행 캐릭터와 hold 스페이스의 내용을 패턴 스페이스에 추가합니다.

[2addr]h
    패턴 스페이스의 내용을 hold 스페이스에 카피합니다.

[2addr]H
    개행 캐릭터와 패턴 스페이스의 내용을 hold 스페이스에 추가합니다.

[1addr]i\
text
    표준 출력에 text (을)를 써냅니다.

[2addr]l
    패턴 스페이스의 내용을 읽을 수 있는 것 같은 이하의 형식에서 출력합니다.

    backslash
        \\
    alert
        \a
    form-feed
        \f
    carriage-return
        \r
    tab \t
    vertical tab
        \v

    인자 불가능한 캐릭터는, 각 바이트 마다 “\” 에 이어 3 자리수의 8 진수로 출력 (Most Significant Byte 가 선두입니다). 긴 행은 되풀이해 표시됩니다. 되풀이한 부분은 “\” 에 계속되는 개행으로 나타납니다. 각 행의 마지막에는 “$” 하지만 출력됩니다.

[2addr]n
    만약, ( -n 옵션에 의해) 디폴트의 출력이 정지되어 있지 않으면, 패턴 스페이스의 내용을 표준 출력에 써냅니다. 또, 패턴 스페이스를 다음의 입력행 그리고 옮겨놓습니다.

[2addr]N
    패턴 스페이스에, 다음의 입력행을 추가합니다. 이 때, 원의 내용과의 사이에 개행을 묻습니다. 현재의 행 번호가 변화하는 것에 주의해 주세요.

[2addr]p
    패턴 스페이스의 내용을 표준 출력에 써냅니다.

[2addr]P
    패턴 스페이스의 최초의 개행까지의 내용을 표준 출력에 써냅니다.

[1addr]q
    스크립트의 나머지를 스킵 해, 다음의 반복을 개시하지 않고 종료합니다.

[1addr]r file
    다음의 입력행을 읽어들이기 직전에, 파일 file 의 내용을 표준 출력에 써냅니다.

[2addr]s/regular expression/replacement/flags
    패턴 스페이스내에서, regular expression 에 대응하는 최초의 부분을 replacement 로 치환합니다. backslash와 개행 이외의 캐릭터를 slash의 대신에용 있을 수가 있습니다. regular expression 와 replacement 안에, 리터럴인 단락지어 문장 글자를 두고 싶을 때는, “\” 에 이어 단락 캐릭터를 둡니다.

    replacement 중의 ampersand(&) (“&”) (은)는, regular expression 에 매치 한 문장 자렬에 치환됩니다. “&” 의 전에 “\” (을)를 두는 것으로, 이 특수한 “&” 의 해석을 금지 할 수가 있습니다. “\#” ( “#” (은)는 숫자)는, regular expression 의 후방 참조(back reference) 표현에 매치 하는 텍스트에 치환됩니다( re_format(7) 참조).

    replacement 에 개행을 포함하는 것으로, 입력행을 분할할 수가 있습니다. 개행의 직전에 “\” (을)를 두는 것으로, replacement 중에 개행을 포함하는 것이 성과

    s 함수의 flags 에는, 이하의 것을 0개 이상 지정할 수 있습니다.

    N   패턴 스페이스에서 N 번째에 매치 한 regular expression 만을 치환합니다.

    g   선두 만이 아니고, 서로 겹치지 않는 모든 매치 한 내용을 replacement로 치환합니다.

    p   치환을 하면(자), 패턴 스페이스의 내용을 표준 출력에 써냅니다. 만약, 치환 후의 내용이 치환전의 것과 동일해도 치환을 했다고 간주합니다.

    w file
        만약 치환을 했다면, 패턴 스페이스의 내용을 파일 file 에 추가합니다. 만약, 치환 후의 내용이 치환전의 것과 동일해도 치환을 했다고 간주합니다.

[2addr]t [label]
    입력행이 읽히고 나서, 혹은 “t” 함수가 실행되고 나서, 치환이 행해지고 있으면, 지정한 label 를 가진다 “”: 명령에 분기 합니다. label 가 손가락 정되어 있지 않은 경우는, 스크립트의 마지막에 분기 합니다.

[2addr]w file
    패턴 스페이스의 내용을 파일 file 에 추가합니다.

[2addr]x
    패턴 스페이스와 hold 스페이스의 내용을 교환합니다.

[2addr]y/string1/string2/
    string1 에 나타나는 패턴 스페이스안의 캐릭터를 string2 의 대응했다 캐릭터에 치환합니다. 예를 들어, `y/abc/ABC/'는 패턴 스페이스안의 캐릭터 a, b, c 를 대문자에 치환합니다. `\'와 개행 이외의 모든 캐릭터를 단락으로 해 (이)라고 이용할 수가 있습니다. string1 , stirng2 안에서는, `\'직후에 개행 이외의 캐릭터가 계속되는 경우는 리터럴로 해석되어 `\n'는 개행이라고 해석됩니다.

[2addr]! function
[2addr]! function-list
    함수 또는 함수 리스트를, address 로 선택되어 있지 않은 행에 적용합니다.

[0addr]:label
    이 함수는 아무것도 실시하지 않습니다. “b” , “t” 그리고 이용하는 label를 생성합니다.

[1addr]=
    행 번호와 개행을 표준 출력에 써냅니다.

[0addr]
    공행은 무시됩니다.

[0addr]#
    “#” (와)과 그 이후의 캐릭터는 무시됩니다(코멘트로서 다루어집니다). 다만, 파일의 줄머리의 2 캐릭터가 `#n'의 경우, 디폴트의 출력이 금지됩니다. 이것은, 명령행 에 -n 옵션을 지정했을 경우와 등가입니다.

환경 변수
COLUMNS, LANG, LC_ALL, LC_CTYPE, LC_COLLATE 의 환경 변수가, environ(7) 의 기술 대로에, sed 의 실행에 영향을 줍니다.

진단

관련 항목
awk(1), ed(1), grep(1), regex(3), re_format(7)

표준
sed 유틸리티는 p1003.2 의 슈퍼 세트가 되고 있을 것입니다.

-i 옵션은 비표준의 FreeBSD 확장이며, 다른 operating system에서는 사용할 수 없을지도 모릅니다.

역사
sed 명령은 AT&T UNIX 그리고 등장했습니다.