| HOME / 정보공유 / AIX 명령어 모음

sed
sed sed 명령 목적 열 편집기를 제공합니다. 구문
sed [ -n ] Script [ File ... ]
sed [ -n ] [ -e Script ] ... [ -f ScriptFile ] ... [ File ... ]
설명
sed 명령은 지정된 File 매개변수에서 편집 스크립트에 따라 행을 수정하여 표준 출력에 기록합니다. sed 명령에는 수정할 행을 선택하고 선택된 행만 변경할 수 있는 많은 기능이 있습니다.
sed 명령은 수정할 행을 보류하기 위해 선택된 행을 보류하는 패턴 영역과 행을 임시로 저장할 수 있는 보류 영역의 2개 작업 영역을 사용합니다.
편집 스크립트는 행으로 구분되는 개별 부속 명령으로 구성되어 있습니다. sed 부속 명령의 일반 형식은 다음과 같습니다.
[주소-범위] 기능[수정자]
sed 명령은 입력 행을 패턴 영역으로 읽어 들이고 주소가 해당 행을 선택하도록 지정된 모든 sed 부속 명령을 순서대로 적용하며 패턴 영역을 표준 출력에 기록함으로써 각 입력 File 매개변수를 처리합니다. 그런 다음 패턴 영역을 지우고 입력 File 매개변수에 지정된 각 행에 대해 이 프로세스를 반복합니다. sed 부속 명령 중 일부는 보류 영역을 사용하여 후속 검색을 위해 패턴 영역 중 일부 또는 모두를 저장합니다.
명령에 주소(행 번호 또는 탐색 패턴 중 하나)가 포함되어 있으면 주소가 있는 행만 명령의 영향을 받게 됩니다. 그렇지 않으면 모든 행에 명령이 적용됩니다.
주소는 십진수 행 번호, 입력의 마지막 행을 나타내는 $(달러 기호) 또는 문맥 주소입니다. 문맥 주소는 다음 차이점을 제외하고 ed 명령에서 사용된 것과 유사한 정규식입니다.
패턴에 대한 문자 분리자를 선택할 수 있습니다. 일반 표현식은 다음과 같습니다.
\?pattern?
여기에서 ?(물음표)는 선택가능한 문자 분리자입니다. 공백 문자 또는 개행 문자를 제외하고 현재 로컬에서 모든 문자를 선택할 수 있습니다. \(역슬래시) 문자는 첫번째 ?(물음표)가 나타나는 곳에만 필요합니다.
패턴의 디폴트 양식은 다음과 같습니다.
/pattern/
\(역슬래시) 문자는 필요하지 않습니다.
\n 문자열은 종료 개행 문자를 제외하고 패턴 영역에 있는 개행 문자와 일치합니다.
한 개의 .(마침표)는 종료 개행 문자를 제외한 하나의 문자에 대응됩니다. 즉, 행의 중간에 있는 개행 문자를 찾지 못하는 ed 명령과 달리 sed 명령은 패턴 영역의 개행 문자를 찾을 수 있습니다.
주소로 불리우는 일부 명령은 명령을 적용할 한 행 또는 행의 범위를 지정합니다. 다음 규칙은 주소 명령에 적용됩니다.
주소가 없는 명령행은 모든 행을 선택합니다.
문맥 형식으로 표시된 하나의 주소가 있는 명령행은 그 주소와 일치하는 각 행을 선택합니다.
쉼표로 분리한 2개의 주소가 있는 명령행은 첫번째 주소와 일치하는 첫번째 행부터 두 번째 주소와 일치하는 행에 이르는 전체 범위를 선택합니다(두 번째 주소가 첫 번째 선택된 행 번호 이하의 수인 경우에는 한 행만 선택됩니다). 그 후 프로세스가 반복되어 첫 번째 주소를 다시 조사합니다.
플래그
-e Script Script 변수를 편집 스크립트로 사용합니다. -f 플래그 없이 하나의 -e 플래그만 사용하는 경우에는 -e 플래그를 생략할 수 있습니다.
-f ScriptFile ScriptFile 변수를 편집 스크립트로 사용합니다. ScriptFile 변수는 File 매개변수에 적용되는 편집 명령의 집합입니다.
-n 표준 출력으로 정보를 보여주지 않습니다.
주: 여러 개의 -e 및 -f 플래그를 지정할 수 있습니다. 기점과 상관없이 모든 부속 명령이 지정된 순서대로 스크립트에 추가됩니다.
sed 부속명령
sed 명령에는 다음의 sed 스크립트 부속 명령이 포함됩니다. 부속 명령 앞에 있는 괄호안의 번호는 부속 명령의 최대 허용 주소 수를 나타냅니다.
주:
a\, c\ 및 i\ 부속 명령을 수반하는 Text 변수는 개행 문자를 인용하는 \(역슬래시)로 끝나는 최종 행을 제외한 모든 행에 대해 둘 이상의 행에서 계속될 수 있습니다. 텍스트의 역슬래시는 s 명령의 대체 문자열에서 역슬래시처럼 처리되며 모든 스크립트 행에서 수행되는 스트립핑에 대해 초기 공백과 탭을 보호하는 데 사용할 수 있습니다. RFile 및 WFile 변수는 명령행의 맨 마지막에 지정해야 하며 반드시 앞에 하나의 문자가 있어야 합니다. 각 WFile 변수는 처리되기 전에 작성됩니다.
sed 명령은 패턴 파일에서 부속 명령을 최고 999개까지 처리할 수 있습니다.
(1) a\
Text 다음 입력 행을 읽기 전에 출력에 Text 변수를 놓습니다.
(2)b[label] label 변수를 갖는 : 명령으로 분기합니다. label 변수가 공백이면 스크립트의 끝으로 분기합니다.
(2)c\
Text 패턴 영역을 삭제합니다. 0이나 1 주소 또는 2 주소 범위의 끝에서 Text 변수를 출력 안에 놓은 뒤 다음 순환을 시작합니다.
(2)d 패턴 영역을 삭제한 뒤 다음 순환을 시작합니다.
(2)D 최초 개행 문자부터 패턴 영역의 초기 세그먼트를 삭제한 뒤 다음 순환을 시작합니다.
(2)g 패턴 영역의 내용을 보류 영역의 내용으로 대체합니다.
(2)G 보류 영역의 내용을 패턴 영역에 추가합니다.
(2)h 보류 영역의 내용을 패턴 영역의 내용으로 대체합니다.
(2)H 패턴 영역의 내용을 보류 영역에 추가합니다.
(1)i\
Text 다음 행을 패턴 영역으로 읽기 전에 Text 변수를 표준 출력에 기록합니다.
(2)l 표시할 수 없는 문자를 4자리의 16진수 값으로 표시하는 패턴 영역을 표준 출력에 기록합니다. 행이 길면 접힘 출력됩니다.
(2)l 패턴 영역을 육안으로 보기에 모호한 양식으로 표준 출력에 기록합니다. 문자 \\\, \\a, \\b, \\f, \\r, \\t 및 \\v는 상응 이스케이프 문자열로 기록됩니다. 인쇄할 수 없는 문자는 문자의 각 바이트에 대해 한개의 3자리 8진수(역슬래시 문자가 앞에 있음)로 기록됩니다. 이 형식은 복수 바이트 문자에서도 사용됩니다. 이 부속 명령은 긴 행은 접힘 출력을 합니다. 개행 문자 다음에 오는 역슬래시는 접힘 출력 지점을 표시합니다. 접힘 출력은 72번째 열에서 발생합니다. $(달러 기호) 표시는 각 행의 끝을 표시합니다.
(2)n 디폴트 출력이 억제되지 않으면 패턴 영역을 표준 출력에 기록합니다. 패턴 영역을 입력의 다음 행으로 대체합니다.
(2)N 패턴 영역에 입력의 다음 행을 개행 문자를 삽입하여 추가합니다. 현재 행 번호는 변경됩니다. 2개의 행으로 분리되는 패턴을 탐색하는 경우에도 사용할 수 있습니다.
(2)p 패턴 영역을 표준 출력에 기록합니다.
(2)P 최초 개행 문자부터 패턴 영역의 초기 세그먼트를 표준 출력에 기록합니다.
(1)q 스크립트의 끝으로 분기합니다. 새 순환을 시작하지 않습니다.
(2)r RFile RFile 변수의 내용을 읽습니다. 다음 입력 행을 읽기 전에 내용을 출력합니다.
(2)s/pattern/replacement/flags
패턴 영역에서 pattern 매개변수가 처음 발생할 때 replacement 문자열을 대체합니다. s 부속 명령 다음에 표시된 문자는 공백 또는 개행 문자를 제외하고 s/(슬래시) 분리기호를 대체할 수 있습니다.
ed 명령의 "패턴 대응" 섹션을 참조하십시오.
flags 변수는 다음 중에서 하나 이상을 지정할 수도 있고, 지정하지 않을 수도 있습니다.
g
첫번째 pattern 매개변수만 대체하는 것이 아니라 모든 중첩하지 않는 인스턴스를 대체합니다.
n
pattern 매개변수에 대해서 n번의 발생만 대체합니다.
p
대체된 경우, 패턴 영역을 표준 출력에 기록합니다.
w WFile
대체된 경우, 패턴 영역을 WFile 변수에 추가합니다. 패턴 영역을 WFile 변수에 추가합니다. 이 sed 스크립트에 의해 이전에 WFile 변수가 작성되지 않은 경우에는 sed 명령이 이를 작성합니다.
(2)tlabel t 부속 명령의 입력 행 실행을 가장 최근에 읽은 후에 대체된 사항이 있으면 스크립트 파일에 있는 :label 변수로 분기합니다. label 변수를 지정하지 않을 경우, 스크립트의 끝으로 분기됩니다.
(2)wWFile 패턴 영역을 WFile 변수에 추가합니다.
(2)x 패턴 영역과 보류 영역의 내용을 교환합니다.
(2)y/pattern1/pattern2/
pattern1 변수에 있는 모든 문자의 발생을 그에 대응하는 pattern2 문자로 대체합니다. pattern1 및 pattern2 변수에 있는 문자 수가 같아야 합니다. 개행 문자는 \n으로 표시합니다.
(2)!sed-cmd 지정된 sed 부속 명령은 주소에 의해 선택되지 않은 행에만 적용됩니다.
(0):label b 및 t 부속 명령이 참조할 분기점을 표시합니다. 이 레이블은 8 바이트 이하의 문자열입니다.
(1)= 현재 행 번호를 행으로 표준 출력에 기록합니다.
(2){subcmd
.
.
.
} {}(중괄호) 안에 있는 부속 명령을 분류합니다.
(0) 공백 명령을 무시합니다.
(0)# #(파운드 기호)가 스크립트 파일에서 행의 첫 번째 문자로 나타나면, 한가지 경우를 제외하고 전체 행을 인용문으로 처리합니다. 스크립트 파일의 처음 행의 경우에 한하여 # 다음 문자가 n이면 디폴트 출력이 억제됩니다. #n 다음에 있는 나머지 행은 무시됩니다.
종료 상태
이 명령은 다음과 같은 종료 값을 리턴합니다.
0 성공적으로 완료하였습니다.
>0 오류가 발생하였습니다.
예제
전체 변경을 수행하려면 다음과 같이 입력하십시오.
sed "s/happy/enchanted/g" chap1 >chap1.new
이 명령열은 chap1 파일에서 happy가 나타날 때마다 이를 enchanted로 대체합니다. 편집된 버전을 chap1.new라고 명명한 다른 파일에 저장합니다. s 부속 명령의 끝에 있는 g 문자는 sed 명령으로 하여금 각 행에서 여러 번 대체가 지시됩니다. g 문자가 없으면 sed 명령은 한 행에서 첫번째 happy만을 대체합니다.
sed 명령은 필터로서 동작합니다. 표준 입력 또는 명령행에서 명명한 파일(이 예제의 경우, chap1)에서 텍스트를 읽고 이 텍스트를 수정하여 표준 출력에 기록합니다. 대부분의 편집기와는 달리, 원래 파일을 대체하지 않습니다. 따라서 파이프라인과 같이 사용하면 더욱 유용합니다.
sed 명령을 파이프라인에서 필터로 사용하려면 다음과 같이 입력하십시오.
pr chap2 | sed "s/Page *[0-9]*$/(&)/" | enq
이 명령열은 파일 chap2를 인쇄하기 전에 페이지 번호를 괄호로 묶습니다. pr 명령이 표제(heading)와 페이지 번호를 각 페이지의 상단에 놓은 뒤 sed 명령이 페이지 번호에 괄호를 붙이고 enq 명령이 편집된 리스트를 인쇄합니다.
sed 명령 패턴 /Page *[0-9]*$/는 행의 끝에 나타나는 페이지 번호를 찾습니다. s 부속 명령은 이 번호를 (&)로 변경하는 데 여기서 &는 일치된 페이지 번호를 나타냅니다.
파일에서 일치된 행을 보려면 다음과 같이 입력하십시오.
sed -n "/food/p" chap3
sed -n은 chap3 파일에서 food가 포함되어 있는 각 행을 보여줍니다. 일반적으로, sed 명령은 편집 후 모든 행을 표준 출력에 씁니다. -n 플래그는 sed 명령이 이를 수행하는 것을 중지합니다. 그런 다음 p와 같은 부속 명령을 사용하여 텍스트의 원하는 부분을 기록합니다. -n 플래그를 사용하지 않으면 이 예제는 chap3 파일의 모든 행을 보여주고 food가 포함된 행을 두 번씩 보여줍니다.
복잡한 편집을 수행하려면 다음과 같이 입력하십시오.
sed -f script.sed chap4 >chap4.new
복잡한 작업을 수행하고자 할 때 sed 스크립트 파일을 작성합니다. 그런 다음 이를 사용하여 사용자 스크립트를 테스트하고 수정할 수 있습니다. 또한 스크립트를 다시 사용하여 다른 파일을 편집할 수도 있습니다. 대화식 문서 편집기로 스크립트 파일을 만드십시오.
sed 스크립트 파일 예는 다음과 같습니다.
:join
/\\$/{N
s/\\\n//
b join
}
이 sed 스크립트는 \(역슬래시)로 끝나는 각 행을 그 다음에 오는 행과 결합합니다. 우선 패턴 /\\$/ 는 {}(중괄호)에 포함된 명령 그룹으로 대체할 \로 끝나는 행을 선택합니다. N 부속 명령은 개행 문자를 포함한 다음 행을 추가합니다. s/\\\n//은 \와 삽입된 개행 문자를 삭제합니다. 마지막으로 b join은 레이블 :join으로 다시 분기하여 새로 결합된 행의 끝에 \ 가 있는지 확인합니다. 분기가 없으면, sed 명령은 결합된 행을 기록하고 두 번째 \를 확인하지 않고 다음 행을 읽습니다.
주: N 부속 명령은 입력 행이 더 이상 없으면 sed 명령을 즉시 정지시킵니다(즉, N 부속 명령이 파일 끝 문자를 읽는 경우). 정지시키기 전에 패턴 영역을 표준 출력에 복사하지 않습니다. 이는 입력의 최종 행이 \(역슬래시)로 끝날 경우 출력되지 않음을 의미합니다.
기존 파일(oldfile)을 신규 파일(newfile)에 복사하고 모든 testpattern 텍스트 문자열을 $REPL 쉘 변수의 내용으로 대체하려면 다음과 같이 입력하십시오.
cat oldfile | sed -e "s/testpattern/$REPL/g" > newfile
관련 정보
awk 명령, ed 명령, grep 명령.