sed는 무엇이며 어떤 용도로 사용됩니까?


20

나는 sed최근에 많이 보았고 다소 혼란스러운 명령임을 알게되었습니다. 맨 페이지는 특별히 도움이되지는 않았지만 다른 명령의 출력을 구문 분석하는 데 사용할 수 있다는 것을 알고 있습니다.

정확히 sed무엇이며 용도는 무엇입니까? 나는 무엇이 무엇인지 sed, 일반적으로 무엇이 사용되는지, 몇 가지 기본 예제 / 구문을 포괄하는 포괄적 인 답변을 찾고 있습니다.


3
Sed 매뉴얼 페이지에서 :Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
saji89

이 포괄적 인 답변을 시작하기에 좋은 장소가 될한다 en.wikipedia.org/wiki/Sed
saji89

1
info sed보다 더 man sed있습니다. 그런 다음에 /usr/share/doc/sed,있다 sedfaq.txt.gz.

답변:


20

기본 사용법에서 문자열로 '검색 및 바꾸기'에 사용됩니다.

echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'

보고

"The quick brown fox jumps over the lazy cat"

Sed는 정규 표현식을 함께 사용할 때 빛납니다.

에 대한 이 기사 를 살펴보고 싶을 것 sed입니다.


5

정의

유닉스 시스템 V : Mark Sobell 의 실용적인 가이드 :

sed 유틸리티는 배치 (비 대화식) 편집기입니다. sed 명령은 일반적으로 script-file에 저장됩니다. . . 명령 줄에서 간단한 sed 명령을 제공 할 수 있습니다. . .

sed (GNU sed) 4.2.2 매뉴얼 페이지 :

Sed는 스트림 편집기입니다. 스트림 편집기는 입력 스트림 (파일 또는 파이프 라인의 입력)에서 기본 텍스트 변환을 수행하는 데 사용됩니다.

비공식적 인 정의 :

Sed( 스트림 편집기의 줄임말 )는 한 번에 한 줄씩 텍스트를 처리 할 때 개발되었지만 가장 강력한 Unix / Linux 유틸리티 중 하나 인 텍스트 처리 유틸리티입니다. 동시에 텍스트 처리를 위해 특별히 설계된 스크립트 언어의 한 형태입니다.

용도

정의에서 알 수 있듯이 sed텍스트 줄, 텍스트 파일 및 파이프 된 텍스트 스트림을 일괄 처리하는 데 사용됩니다. 가장 자주 텍스트를 삭제하고 삭제하는 데 사용됩니다.

echo "stackexchange" | sed 's/stackexchange/askubuntu/'

그러나 다른 명령의 동작을 모방하는 데 사용될 수도 있습니다.

  • 모방하기 위해 dmesg | head -n 3(처음 3 줄 인쇄) 할 수 있습니다 dmesg | sed -n 1,3p.
  • 모방 dmesg | grep 'wlan0'(문자열 검색), 우리는 할 수 있습니다dmesg | sed -n '/wlan0/p'
  • 목록 항목

sed다른 텍스트 처리 유틸리티보다 큰 장점 은 -i플래그입니다. 즉, 편집 한 텍스트를 화면에 출력 할 수있을뿐 아니라 편집 내용을 원본 파일에 실제로 저장할 수 있습니다. awk반대로 flavors는 GNU awk버전 에서 이러한 기능 만 갖습니다 .

sed세미콜론 ( ;) 으로 구분 되거나 -f플래그 뒤에 지정된 스크립트 파일에서 여러 패턴으로 명령 행에 입력 할 수 있습니다 . 예 :cat someTextfile.txt | sed -f myScript.sed

sed 응용 프로그램 및 예


1

sed 강력한 명령으로 행 제거, 문자열 대체, 문자열 필터링 등을 수행 할 수 있습니다.

나는 당신에게 args와 함께 사용 목록을 줄 수는 있지만 인터넷은 그 가득합니다. 검색 sed usage by examples하면 많은 결과를 얻을 수 있습니다. 귀여운 결과는 다음과 같습니다 .


1

이 답변은 진행중인 작업입니다. susbstitute 명령에 대한 추가 예제가 누락되었습니다


무엇입니까 sed?

sed = 스트림 교육자

GNU sed4.2.2 보고서 매뉴얼 페이지의 설명 :

Sed는 스트림 편집기입니다. 스트림 편집기는 입력 스트림 (파일 또는 파이프 라인의 입력)에서 기본 텍스트 변환을 수행하는 데 사용됩니다. 스크립트 편집 (예 : ed)을 허용하는 편집기와 유사한 방식으로 sed는 입력을 한 번만 통과하여 작동하므로 결과적으로 더 효율적입니다. 그러나 sed는 파이프 라인에서 텍스트를 필터링하여 특히 다른 유형의 편집기와 텍스트를 구분하는 기능입니다.

gnu.orgGNU sed페이지에 기술 된 내용은 다음과 같습니다.

sed (스트림 편집기)는 대화식 텍스트 편집기가 아닙니다. 대신 텍스트를 필터링하는 데 사용됩니다. 즉, 텍스트 입력, 일부 작업 (또는 작업 집합)을 수행하고 수정 된 텍스트를 출력합니다. sed는 일반적으로 패턴 일치를 사용하거나 파일 내에서 여러 문자열을 대체하여 파일의 일부를 추출하는 데 사용됩니다.

무엇을 sed위해 사용됩니까?

데이터 스트림 (일반적으로 텍스트)에 대한 복잡한 수정을 수행하는 데 사용할 수 있지만 이진 데이터를 수정하는 데에도 사용할 수 있습니다.

가장 일반적인 사용 사례는 다음과 같습니다.

  • 기본 / 확장 정규식을 사용하여 텍스트 파일에서 선을 선택적으로 인쇄 / 삭제
  • 기본 / 확장 정규식을 사용하여 텍스트 파일에서 문자열을 전체적으로 대체
  • 기본 / 확장 정규식을 사용하여 텍스트 파일에서 문자열을 선택적으로 대체

이 답변에서 다루는 사용 사례입니다.

용법

sed호출 중에 파일 이름이 명령 행 인수 stdin에 지정 되거나 파일 이름이 지정되지 않은 경우 파일 시스템에 저장된 파일에서 입력을 읽습니다 .

파일 시스템에 저장된 파일을 사용한 최소 호출 :

sed '' file

다음을 사용하여 최소 호출 stdin:

# herestring
<<<'Hello, World!' sed ''

# heredoc
<<'EOF' sed ''
heredoc> Hello, World!
heredoc> EOF

# file
<'file' sed ''

# pipe
echo 'Hello, World!' | sed ''

안녕, 월드!

sed기본적으로 입력 파일을 한 줄씩 읽습니다. 한 줄을 읽고 줄의 마지막 줄 바꿈을 제거하고 처리 된 줄을 "패턴 공간"에 넣습니다. 마지막으로, 패턴 공간의 현재 내용에 대해 나열된 명령을 실행하고 입력 파일에서 새 행을 읽습니다.

명령이 지정되지 않았거나 a p또는 d명령이 지정되면 * sed는 항상 다음과 관계없이 패턴 공간의 현재 내용을 인쇄 한 다음 각 반복마다 줄 바꾸기를 인쇄합니다.

user@debian ~ % sed '' file
Hello, world! # no command but the lines are printed
user@debian ~ % sed 'p' file
Hello, World!
Hello, World! # the p command prints the lines already printed
user@debian ~ % sed 'd' file
user@debian ~ % # the d command deletes the lines that would be printed

이를 방지하기 위해 스위치 sed와 함께 호출 할 수 있습니다 -n.

user@debian ~ % sed -n '' file
user@debian ~ % sed -n 'p' file
Hello, World!
user@debian ~ % sed -n 'd' file
user@debian ~ % 

* 이 답변에서 다루는 명령 pds명령에 대해서만 말하기 .

라인 선택

sed전체 입력 파일을 처리하거나 입력 파일의 선택된 행만 처리 할 수 ​​있습니다. 처리 될 입력 파일의 라인의 선택은 "주소"를 지정함으로써 행해진 다; 주소는 라인 번호 또는 패턴 일 수 있습니다. 주소 범위를 지정하여 행 범위를 선택할 수 있습니다.

가능한 주소 조합은 다음과 같습니다.

  • <N>(여기서 <N>숫자) : 다음 명령 / 명령은 행 번호에서만 실행됩니다 <N>.
  • <N>,<M>(단, <N><M>두 개의 숫자가된다 <N>> <M>) 다음 명령 / 명령 라인 번호에 이르는 라인에 실행될 <N>라인 번호를 <M>포함;
  • /<pattern>/( <pattern>기본 또는 확장 정규식이있는 위치 ) : 다음 명령 / 명령은 <pattern>;
  • /<pattern1>/,/<pattern2>/(여기서 <pattern1>하고 <pattern2>있는 염기성 또는 정규식 확장) 다음 명령 / 명령어의 선두로부터가 포함 된 첫 번째 행에서부터 라인 실행될 <pattern1>의 선두로부터 들어 다음 행으로 <pattern2>정렬 된 다수의 경우에 여러 번 <pattern1>- <pattern2>OCCURENCES;
  • <N>,/pattern/(여기서 <N>숫자이고 <pattern>기본 또는 확장 정규식입니다.) 다음 명령 / 명령은 행 번호 <N>에서 <pattern>;
  • /pattern/,<N>(여기서는 <pattern>기본 또는 확장 정규식이며 <N>숫자입니다.) 다음 명령 / 명령은 발생을 포함하는 첫 번째 행 <pattern>부터 행 번호까지의 행 에서 실행됩니다 <N>.

행 범위에서 인쇄, 삭제 또는 대체를 수행하기 위해 수행 된 선택에는 항상 지정된 주소와 일치하는 행이 포함됩니다. 또한, 선택은 인쇄 삭제 패턴을 사용하는 것은 라인의 범위에서 치환을 수행하기 위해 수행 지연전역 (즉, 각각의 영향 범위가 항상 가능한 가장 작은 것이고, 여러 범위가 영향을받을 것이다).

라인 범위를 인쇄하거나 대체가 수행 된 라인 만 인쇄 하는 경우, 기준과 일치하는 라인이 두 번 인쇄되는 것을 방지하기 위해 스위치 sed와 함께 호출해야합니다 -n(라인 범위를 인쇄 할 때만 발생 함). 기준과 일치하지 않는 선이 인쇄되지 않도록 방지합니다.

처리 될 행은 명령 또는 중괄호를 사용하여 그룹화 된 여러 세미콜론으로 구분 된 명령을 따라야합니다.

명령 : 인쇄, 삭제

선택을 인쇄하거나 삭제하는 데 사용되는 명령은 각각 다음과 같습니다.

  • p: 지정된 주소 / 주소 범위와 일치하는 행을 인쇄합니다.
  • d: 지정된 주소 / 주소 범위와 일치하는 행을 삭제합니다.

이러한 명령 중 하나 앞에 주소 / 선택 이 없으면 명령이 전체적으로, 즉 입력 파일의 각 행에서 실행됩니다.

예 : 인쇄, 삭제

숫자 주소를 지정하는 행 인쇄 / 삭제 :

샘플 파일 :

line1
line2
line3
line4
line5
  • 인쇄 라인 <N>:
sed -n '<N>p' file
user@debian ~ % sed -n '3p' file
line3
  • 라인 삭제 <N>:
sed '<N>d' file
user@debian ~ % sed '3d' file
line1
line2
line4
line5
  • 다음 <N><M>포함한 인쇄 라인 :
sed -n '<N>,<M>p' file
user@debian ~ % sed -n '2,4p' file
line2
line3
line4
  • <N><M>포함 하여 삭제 :
sed '<N>,<M>d' file
user@debian ~ % sed '2,4d' file
line1
line5

패턴 지정 라인 인쇄 / 삭제 :

샘플 파일 :

First line
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
Last line
  • 인쇄 라인 일치 <pattern>:
sed -n '/<pattern>/p' file
user@debian ~ % sed -n '/print/p' file
Start printing / deleting here
Stop printing / deleting here
  • 일치하는 줄 삭제 <pattern>:
sed '/<pattern>/d' file
user@debian ~ % sed '/print/d' file 
First line
Random line
Random line
Random line
Last line
  • 라인 매칭 <pattern1>에서 라인 매칭을 <pattern2>포함한 라인 인쇄 :
sed -n '/<pattern1>/,/<pattern2>/p' file
user@debian ~ % sed -n '/Start/,/Stop/p' file
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
  • 라인 매칭 <pattern1>에서 라인 매칭을 <pattern2>포함 하여 라인 삭제 :
sed '/<pattern1>/,/<pattern2>/d' file
user@debian ~ % sed '/Start/,/Stop/d' file 
First line
Last line

명령 : 대체

선택에서 대체를 수행하는 데 사용되는 명령은 다음과 같습니다.

  • s: 지정된 주소 / 주소 범위와 일치하는 행을 대체합니다.

이 명령 앞에 주소 / 선택 이 없으면 명령이 전체적으로, 즉 입력 파일의 각 줄에서 실행됩니다.

s명령 구문 은 다음과 같습니다.

s/<pattern>/<replacement_string>/<pattern_flags>

슬래시는 "구분자"입니다. <pattern>, <replacement_string><pattern_flags>섹션 을 구분하는 데 사용 됩니다.

구분자는 항상 s명령 바로 다음에 나오는 문자입니다 . 다른 문자로 설정할 수 있습니다 (예 |:

s|<pattern>|<replacement_string>|<pattern_flags>

<pattern>기본 또는 확장 정규식입니다. 특수한 의미를 가진 특정 시퀀스를 <replacement_string>포함 할 수있는 고정 문자열입니다 sed. <pattern_flags>의 동작을 수정하는 플래그 목록입니다 <pattern>.

sed특별한 의미를 가진 가장 일반적인 특정 시퀀스 :

  • &: 역 참조가 일치하는 문자열로 대체되었습니다 <pattern>.
  • \<N>(여기서 <N>숫자) : 역 참조가 <N>캡처 된 그룹으로 대체 되었습니다 <pattern>.

가장 일반적인 플래그 :

  • g: <pattern>전역 적으로, 즉 각 라인에서 여러 번 일치하도록 강제 ;
  • i: <pattern>대소 문자를 구분하지 않고 강제 로 일치시킵니다.
  • p: 대체가 수행 된 행을 한 번 더 인쇄합니다 ( '호출 -n에서 스위치를 사용하여 대체가 수행 된 행만 인쇄 할 때 유용함 sed).

예 : 대체

샘플 파일 :

A-well-a everybody's heard about the bird
B-b-b-bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, the bird is the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a don't you know about the bird?
Well, everybody knows that the bird is the word!
A-well-a bird, bird, b-bird's the word
A-well-a...
  • 의를 선두 교체 <pattern><replacement_string>각 행을 :
sed 's/<pattern>/<replacement_string>/' file
user@debian ~ % sed 's/bird/birds/' file
A-well-a everybody's heard about the birds
B-b-b-birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, the bird is the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, bird, b-bird's the word
  • 의 모든 발행 수를 교체 <pattern><replacement_string>각 행 :
sed 's/<pattern>/<replacement_string>/g' file
user@debian ~ % sed 's/bird/birds/g' file
A-well-a everybody's heard about the birds
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, birds, b-birds's the word
A-well-a...
  • 전용 라인으로 시작하는 선택 <pattern1>그리고 모든 발행 수를 교체 <pattern2>와를 <replacement_string>:
sed -n '/^<pattern1>/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/^A/s/bird/birds/pg' file
A-well-a everybody's heard about the birds
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
A-well-a birds, birds, b-birds's the word
  • 로 끝나는 줄만 선택 하고 다음으로 <pattern1>나타나는 모든 항목을 바꾸십시오 .<pattern2><replacement_string>
sed -n '/<pattern1>$/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/word$/s/bird/birds/pg' file
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, b-birds's the word
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.