sed 명령

용도

스트림 편집기.

구문

sed [ -n ] [ -u ] Script  [ File ... ]

sed [ -n ] [ -u ] [ -e Script ] ... [ -f ScriptFile ] ...  [ File ... ]

설명

sed 명령은 편집 스크립트에 따라 지정된 File 매개변수에서 행을 수정하고 표준 출력에 작성합니다. sed 명령에는 수정하려는 행을 선택하고 선택된 행만 변경하기 위한 많은 기능이 포함됩니다.

sed 명령은 수정되는 행을 보유하기 위해 두 개의 작업공간을 사용합니다. 즉, 선택된 행이 보유되는 곳에는 패턴 공간을 사용하고 행이 임시로 저장될 수 있는 곳에는 보유 공간을 사용합니다.

편집 스크립트는 별도의 각 행에 개별 부속 명령으로 구성됩니다. sed 부속 명령의 일반 형식은 다음과 같습니다.

[address-range] function[modifiers]

sed 명령은 입력 행을 패턴 공간으로 읽어들이고 주소가 해당 행을 선택하는 순서로 모든 sed 부속 명령을 적용하며 표준 출력에 패턴 공간을 기록하여 각 입력 File 매개변수를 처리합니다. 그런 다음, 패턴 공간을 지우고 입력 File 매개변수에 지정되는 각 행에 대해 이 프로세스를 반복합니다. 일부 sed 부속 명령은 보류 영역을 사용하여 후속 검색을 위해 패턴 공간의 일부 또는 모두를 저장합니다.

명령에 주소(행 번호 또는 검색 패턴)가 포함될 때, 주소 지정된 행 또는 행만 명령에 의해 영향을 받습니다. 그렇지 않으면, 명령이 모든 행에 적용됩니다.

입력의 마지막 행을 주소 지정하는 주소는 10진수 행 번호인 $(달러 기호) 또는 문맥 주소입니다. 문맥 주소는 다음 차이점을 제외하고 ed 명령에 사용되는 것과 유사한 정규식입니다.

  • 패턴에 대한 문자 분리 문자를 선택할 수 있습니다. 표현식의 일반 양식은 다음과 같습니다.
    \?pattern?
    여기서 ? (물음표)는 선택 가능한 문자 분리 문자입니다. 공간 또는 줄 바꾸기 문자를 제외하고 현재 로케일에서 문자를 선택할 수 있습니다. \(백슬래시) 문자는 ?(물음표)의 첫 번째 발생에만 필요합니다.

    패턴의 디폴트 양식은 다음과 같습니다.

    /pattern/
    \(백슬래시) 문자는 필요하지 않습니다.
  • \n 시퀀스는 줄 바꾸기 문자 종료를 제외하고 패턴 공간에서 줄 바꾸기 문자와 일치합니다.
  • . (마침표)는 줄 바꾸기 문자 종료를 제외하고 문자와 일치합니다. 즉, 행의 중간에 줄 바꾸기 문자와 일치할 수 없는 ed 명령과는 달리, sed 명령은 패턴 공간의 줄 바꾸기 문자와 일치할 수 있습니다.

addressed 명령이라는 특정한 명령을 사용하면 명령이 적용되어야 하는 행의 범위 또는 하나의 행을 지정할 수 있습니다. 다음 규칙은 주소 명령에 적용됩니다.

  • 주소가 없는 명령행은 모든 행을 선택합니다.
  • 문맥 형식으로 표시된 하나의 주소가 있는 명령행은 그 주소와 일치하는 각 행을 선택합니다.
  • 쉼표로 구분된 두 개의 주소를 가지는 명령행은 두 번째 주소와 일치하는 다음 행을 통해 첫 번째 주소와 일치하는 첫 번째 행에서 전체 범위를 선택합니다. (두 번째 주소가 처음 선택된 회선 번호 이하인 경우, 하나의 행만 선택됩니다.) 그 후에, 첫 번째 주소를 다시 검색하여 프로세스가 반복됩니다.

플래그

항목 설명
-e 스크립트 편집 스크립트로서 스크립트 변수를 사용합니다. 하나의 -e 플래그와 -f 플래그도 사용하고 있지 않으면, -e 플래그는 생략될 수 있습니다.
-f ScriptFile 편집 스크립트의 소스로서 ScriptFile 변수를 사용합니다. ScriptFile 변수는 File 매개변수에 적용되는 준비된 편집 명령 세트입니다.
-n 표준 출력으로 정상적으로 기록된 모든 정보를 억제합니다.
-u 버퍼없음 모드에서 출력을 표시합니다. 이 플래그가 설정될 때, sed 명령은 출력을 버퍼링하는 대신 즉시 출력을 표시합니다. 디폴트는 버퍼링된 모드입니다.
참고: 여러 -e-f 플래그를 지정할 수 있습니다. 모든 부속 명령이 기점과 상관 없이 지정된 순서대로 스크립트에 추가됩니다.

sed 부속 명령

sed 명령에는 다음 sed 스크립트 부속 명령이 포함됩니다. 부속 명령을 선행하는 소괄호의 번호는 부속 명령에 대해서 최대 개수의 허용 가능한 주소를 표시합니다.
참고:
  1. a\, c\i\ 부속 명령을 수반하는 텍스트 변수는 두 개 이상의 행으로 계속될 수 있고 줄 바꾸기 문자를 인용하기 위해 모든 행이지만 마지막에 \(백슬래시)가 제공됩니다. 텍스트의 백슬래시는 s 명령의 교체 문자열에서 백슬래시와 같이 처리되고 모든 스크립트 행에서 수행되는 스트리핑에 대한 초기 공백 및 탭을 보호하기 위해 사용될 수 있습니다. RFileWFile 변수는 명령행을 종료해야 하고 정확히 하나의 공백으로 선행되어야 합니다. 각 WFile 변수가 처리 시작 전에 작성됩니다.
  2. sed 명령은 패턴 파일에서 최대 999개의 부속 명령을 처리할 수 있습니다.
항목 설명
(1) a\텍스트 다음 입력 행을 읽기 전에 출력에 텍스트 변수를 위치시킵니다.
(2)b[레이블] 레이블 변수를 지탱하는 : 명령으로 분기합니다. 레이블 변수가 비어 있는 경우, 스크립트의 끝으로 분기합니다.
(2)c\텍스트 패턴 공간을 삭제합니다. 2 주소 범위의 끝 또는 0 혹은 1 주소로 텍스트 변수를 출력에 위치시키고 다음 순환을 시작합니다.
(2)d 패턴 공간을 삭제하고 다음 순환을 시작합니다.
(2)D 첫 번째 줄 바꾸기 문자를 통해 패턴 공간의 초기 세그먼트를 삭제하고 다음 순환을 시작합니다.
(2)g 패턴 공간의 컨텐츠를 보유 공간의 컨텐츠로 대체합니다.
(2)G 보유 공간의 컨텐츠를 패턴 공간에 추가합니다.
(2)h 보유 공간의 컨텐츠를 패턴 공간의 컨텐츠로 대체합니다.
(2)H 패턴 공간의 컨텐츠를 보유 공간에 추가합니다.
(1)i\텍스트 다음 행을 패턴 공간으로 읽기 전에 텍스트 변수를 표준 출력에 기록합니다.
(2)l 4자 16진 값으로 표시할 수 없는 문자를 표시하는 표준 출력으로 패턴 공간을 작성합니다. 장거리 회선은 접철됩니다.
(2)l 시각적으로 명백한 양식으로 패턴 공간을 표준 출력으로 작성합니다. \\\, \\a, \\b, \\f, \\r, \\t 및 \\v 문자는 해당 이스케이프 시퀀스로 작성됩니다. 인쇄할 수 없는 문자는 문자의 각 바이트에 대해 한 개의 3자리 8진수(백슬래시 문자가 앞에 있음)로 기록됩니다. 이 형식은 복수 바이트 문자에서도 사용됩니다. 이 부속 명령은 장거리 회선을 접철시킵니다. 줄 바꾸기 문자 다음에 오는 백슬래시는 대문자 변환 지점을 표시합니다. 대문자 변환은 72번째 열에서 발생합니다. $(달러 부호) 표시는 각 행의 끝을 표시합니다.
(2)n 디폴트 출력이 억제되지 않으면 패턴 공간을 표준 출력에 기록합니다. 패턴 공간을 입력의 다음 행으로 대체합니다.
(2)N 입력의 다음 행을 임베드된 줄 바꾸기 문자(현재 행 번호 변경)로 패턴 공간에 추가합니다. 두 개의 행으로 구분되는 패턴을 검색하는 경우에도 사용할 수 있습니다.
(2)p 패턴 영역을 표준 출력에 작성합니다.
(2)P 첫 번째 줄 바꾸기 문자를 통한 패턴 공간의 초기 세그먼트를 표준 출력에 작성합니다.
(1)q 스크립트의 끝으로 분기합니다. 새 순환을 시작하지 않습니다.
(2)r RFile RFile 변수의 컨텐츠를 읽습니다. 다음 입력 행을 읽기 전에 출력에 컨텐츠를 위치시킵니다.
(2)s/패턴/교체/플래그 패턴 영역에서 pattern 매개변수가 처음 발생할 때 교체 문자열을 대체합니다. s 부속 명령 뒤에 표시되는 문자는 공간 또는 줄 바꾸기 문자를 제외하고 /(슬래시) 구분 기호로 대체할 수 있습니다.

ed 명령의 패턴 대응 섹션을 참조하십시오.

플래그 변수의 값은 0 이상이어야 합니다.

g
첫 번째 것 대신 pattern 매개변수의 모든 비중첩 인스턴스를 대체합니다.
n
pattern 매개변수의 n-th 발생만 대체합니다.
p
교체되면 패턴 공간을 표준 출력으로 기록합니다.
w WFile
교체되면 패턴 공간을 WFile 변수로 작성합니다. WFile 변수로 패턴 공간을 추가합니다. 이 sed 스크립트에 의해 이전에 WFile 변수가 작성되지 않은 경우에는 sed 명령이 이를 작성합니다.
(2)t레이블 t 부속 명령의 입력 행 실행을 가장 최근에 읽은 후에 대체된 사항이 있으면 스크립트 파일에 있는 :레이블 변수로 분기합니다. 레이블 변수를 지정하지 않을 경우, 스크립트의 끝으로 제어가 전송됩니다.
(2)wWFile WFile 변수로 패턴 공간을 추가합니다.
(2)x 패턴 공간 및 보유 공간의 컨텐츠를 교환합니다.
(2)y/pattern1/pattern2/ pattern1 변수의 모든 발생 문자를 해당 pattern2 문자로 대체합니다. pattern1 pattern2 변수의 문자 수는 동일해야 합니다. 줄 바꾸기 문자가 \n으로 표시됩니다.
(2)!sed-cmd 지정된 sed 부속 명령을 주소에서 선택하지 않은 행에만 적용됩니다.
(0):레이블 bt 부속 명령에서 참조되도록 분기점을 표시합니다. 이 레이블은 8바이트 이하의 시퀀스일 수 있습니다.
(1)= 현재 행 번호를 행으로 표준 출력에 작성합니다.
(2){subcmd } {}(중괄호)로 묶여 있는 부속 명령을 그룹으로 분류합니다.
(0) 공백 명령을 무시합니다.
(0)# "#" 및 나머지 행이 주석으로 처리되어 무시됩니다. 단, 한 가지 사항은 예외입니다. 스크립트 파일의 첫 번째 행에서 # 다음 문자가 n일 경우 디폴트 출력이 억제됩니다. #n 다음에 있는 나머지 행은 무시됩니다.

종료 상태

이 명령은 다음 종료값을 리턴합니다.

항목 설명
0 성공적으로 완료되었습니다.
>0 오류가 발생했습니다.

예제

  1. 글로벌 변경을 수행하려면 다음을 입력하십시오.
    sed  "s/happy/enchanted/g" chap1  >chap1.new
    이 명령 시퀀스는 chap1 파일에서 발견되는 happy 단어의 각 발생을 enchanted 단어로 대체합니다. chap1.new라는 개별 파일에 편집한 버전을 입력합니다. s 부속 명령의 끝에 있는 g 문자는 sed 명령으로 각 행에서 여러 번 대체가 지시됩니다. g 문자 없이, sed 명령은 행에서 happy 단어의 첫 번째 발생만 대체합니다.

    sed 명령은 필터로 작동합니다. 표준 입력 또는 명령행에서 이름 붙여진 파일(이 예제의 경우, chap1)에서 텍스트를 읽고 이 텍스트를 수정하여 표준 출력에 작성합니다. 대부분의 편집기와는 달리, 원래 파일을 대체하지 않습니다. 파이프라인에서 사용될 때 이는 sed 명령을 강력한 명령으로 만듭니다.

  2. sed 명령을 파이프라인에서 필터로 사용하려면 다음과 같이 입력하십시오.
    pr  chap2 | sed "s/Page *[0-9]*$/(&)/" | enq
    이 명령 시퀀스는 파일 chap2를 인쇄하기 전에 페이지 번호를 괄호로 묶습니다. pr 명령은 각 페이지의 맨 위에 표제와 페이지 번호를 두고, sed 명령이 페이지 번호를 괄호에 넣고 enq 명령이 편집된 목록을 인쇄합니다.

    sed 명령 패턴 /Page *[0-9]*$/은 행의 마지막에 나타나는 페이지 번호와 일치합니다. s 부속 명령은 이를 (&)로 변경하고, 여기서 &가 일치되는 페이지 번호를 나타냅니다.

  3. 파일의 선택된 행을 표시하려면 다음을 입력하십시오.
    
    sed  -n  "/food/p" chap3
    sed -nfood 단어를 포함하는 파일 chap3에 각 행을 표시합니다. 일반적으로, sed 명령은 편집된 후 표준 출력으로 모든 행을 복사합니다. -n 플래그는 sed 명령이 이를 수행하지 못하게 합니다. p와 같은 부속 명령을 사용하여 텍스트의 특정 부분을 작성합니다. -n 플래그 없이, 이 예는 모든 행을 파일 chap3에 표시하고 food를 포함하는 각 행을 두 번씩 표시합니다.
  4. 복잡한 편집을 수행하려면 다음을 입력하십시오.
    sed  -f  script.sed  chap4  >chap4.new
    이 명령 시퀀스는 복잡한 것을 수행하려고 할 때 sed 스크립트 파일을 작성합니다. 사용하기 전에 스크립트를 테스트하고 수정할 수 있습니다. 스크립트를 다시 사용하여 다른 파일을 편집할 수도 있습니다. 대화식 텍스트 편집기로 스크립트 파일을 작성하십시오.
  5. 샘플 sed 스크립트 파일은 다음과 같습니다.
    :join
    /\\$/{N
    s/\\\n//
    b join
    }
    sed 스크립트는 \(백슬래시)로 끝나는 각 행을 다음에 오는 행과 결합합니다. 먼저, 패턴 /\\$/ {}(중괄호)로 묶인 명령 그룹을 위해 \로 끝나는 행을 선택합니다. N 부속 명령이 줄 바꾸기 문자를 임베드하여 다음 행을 추가합니다. s/\\\n//\를 삭제하고 줄 바꾸기 문자를 임베드합니다. 마지막으로, b join은 새로 결합된 행의 끝에서 를 검사하기 위해 레이블 b join으로 다시 분기합니다 분기 없이, sed 명령은 결합된 행을 쓰고 두 번째  \를 검사하기 전에 다음 것을 읽습니다.
    참고: N 부속 명령은 sed 명령이 입력 행이 더 이상 없는 경우(즉, N 부속 명령이 EOF 문자를 읽는 경우) 즉시 중지되도록 합니다. 정지시키기 전에 패턴 영역을 표준 출력에 복사하지 않습니다. 이는 입력의 마지막 행이 \로 끝날 경우, 출력으로 복사되지 않는다는 것을 의미합니다.
  6. 기존 파일(oldfile)을 새 파일(newfile)로 복사하고 testpattern 텍스트 문자열의 모든 내용을 $REPL 쉘 변수의 컨텐츠로 대체하려면 다음을 입력하십시오.
    
    cat oldfile | sed -e "s/testpattern/$REPL/g" > newfile
  7. A의 모든 내용은 a로, B의 모든 내용은 b로, C의 모든 내용은 c로 대체하고 새 행의 모든 내용은 입력 파일에서 문자 Z로 대체하려면 다음을 입력하십시오.
    $ sed -f command.file input.file
    여기서 command.file은 스크립트 파일이고 input.file은 입력파일입니다.
       $cat command.file
       y/ABC\n/abcZ/
    대신, 다음 명령이 동일한 기능에 대해 실행될 수 있습니다.
    sed "y/ABC\n/abcZ/" input.file