스트림 편집기-기본 명령
이 장에서는 몇 가지 유용한 SED 명령에 대해 설명합니다.
명령 삭제
SED는 텍스트를 조작하는 다양한 명령을 제공합니다. 먼저delete명령. 다음은 삭제 명령을 실행하는 방법입니다.
[address1[,address2]]d
address1 과 address2각각 시작 및 끝 주소이며 행 번호 또는 패턴 문자열 일 수 있습니다. 이 두 주소는 모두 선택적 매개 변수입니다.
이름에서 알 수 있듯이 delete 명령은 삭제 작업을 수행하는 데 사용되며 SED가 온라인으로 작동하므로이 명령을 사용하여 줄을 삭제한다고 말할 수 있습니다. delete 명령은 패턴 버퍼에서만 행을 제거합니다. 라인은 출력 스트림으로 전송되지 않고 원본 파일은 변경되지 않습니다. 다음 예는 요점을 보여줍니다.
[jerry]$ sed 'd' books.txt
그러나 출력은 어디에 있습니까? 회선 주소가 제공되지 않으면 SED는 기본적으로 모든 회선에서 작동합니다. 따라서 패턴 버퍼에서 모든 행을 삭제합니다. 이것이 명령이 표준 출력에 아무것도 인쇄하지 않는 이유입니다.
SED가 특정 라인에서만 작동하도록 지시합시다. 다음 예제는 네 번째 줄만 제거합니다.
[jerry]$ sed '4d' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
또한 SED는 쉼표 (,)를 사용하여 주소 범위도 허용합니다. SED에 N1에서 N2 라인을 제거하도록 지시 할 수 있습니다. 예를 들어 다음 예제는 2에서 4까지의 모든 행을 삭제합니다.
[jerry]$ sed '2, 4 d' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
SED의 주소 범위는 숫자에만 국한되지 않습니다. 패턴을 주소로 지정할 수도 있습니다. 다음 예제는 저자 Paulo Coelho의 모든 책을 제거합니다.
[jerry]$ sed '/Paulo Coelho/d' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864
텍스트 패턴을 사용하여 주소 범위를 지정할 수도 있습니다. 다음 예제는 패턴 사이의 모든 선을 제거합니다.Storm 과 Fellowship.
[jerry]$ sed '/Storm/,/Fellowship/d' books.txt
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
이외에도 달러 ($), 더하기 (+) 및 물결표 (~) 연산자를 SED와 함께 사용할 수 있습니다.
쓰기 명령
파일에 대해 수행하는 중요한 작업 중 하나는 백업입니다. 즉, 파일의 다른 복사본을 만듭니다. SED는write파일에 패턴 버퍼의 내용을 저장하는 명령. 아래에 주어진 구문은write 다음과 유사한 명령 delete 명령.
[address1[,address2]]w file
여기, address1 과 address2각각 시작 및 끝 주소이며 줄 번호 또는 패턴 문자열 일 수 있습니다. 이 두 주소는 모두 선택적 매개 변수입니다.
위의 구문에서 w 쓰기 명령을 참조하고 file내용을 저장하는 파일 이름입니다. 조심하세요file매개 변수. 파일 이름이 제공되면 SED는 파일이없는 경우 즉시 파일을 만들고 이미있는 경우 파일을 덮어 씁니다.
SED를 사용하여 파일의 정확한 사본을 만들어 보겠습니다. 사이에 정확히 하나의 공백이 있어야합니다.w 과 file.
[jerry]$ sed -n 'w books.bak' books.txt
우리는 books.bak. 이제 두 파일의 내용이 동일한 지 확인하십시오.
[jerry]$ diff books.txt books.bak
[jerry]$ echo $?
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
0
당신은 가정 할 수 있습니다 cp명령은 똑같은 일을합니다. 예! 그만큼cp명령은 동일한 일을하지만 SED는 성숙한 유틸리티입니다. 소스 파일에서 특정 줄만 포함하는 파일을 만들 수 있습니다. 다른 파일에 짝수 줄만 저장하겠습니다.
[jerry]$ sed -n '2~2 w junk.txt' books.txt
[jerry]$ cat junk.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864
write 명령에 쉼표 (,), 달러 ($) 및 더하기 (+) 연산자를 사용할 수도 있습니다.
이 외에도 SED는 쓰기 명령으로 패턴 일치를 지원합니다. 개별 저자의 모든 책을 별도의 파일에 저장한다고 가정합니다. 지루하고 긴 방법 중 하나는 수동으로 수행하는 것이고 더 현명한 방법은 SED를 사용하는 것입니다.
[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w
Tolkien.txt' books.txt
위의 예에서 우리는 패턴에 대해 각 줄을 일치시키고 일치하는 줄을 특정 파일에 저장합니다. 매우 간단합니다. 여러 명령을 지정하기 위해-eSED 명령의 스위치. 이제 각 파일에 포함 된 내용을 살펴 보겠습니다.
[jerry]$ cat Martin.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
6) A Game of Thrones, George R. R. Martin, 864
파일 내용을 표시하겠습니다.
[jerry]$ cat Paulo.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
파일 내용을 표시하겠습니다.
[jerry]$ cat Tolkien.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
우수한! 예상 한 결과를 얻었습니다. SED는 정말 놀라운 유틸리티입니다.
명령 추가
텍스트 편집기의 가장 유용한 작업 중 하나는 추가 기능을 제공하는 것입니다. SED는 추가 명령을 통해이 작업을 지원합니다. 다음은 추가 구문입니다.
[address]a\
Append text
4 번 줄 뒤에 새 책 항목을 추가하겠습니다. 다음 예제는이를 수행하는 방법을 보여줍니다.
[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
7) Adultry, Paulo Coelho, 234
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
명령 섹션에서 4 줄 번호를 의미합니다. a 추가 명령이고 나머지 부분은 추가 할 텍스트입니다.
파일 끝에 텍스트 줄을 삽입하겠습니다. 이렇게하려면$주소로. 다음 예는이를 설명합니다.
[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
7) Adultry, Paulo Coelho, 234
줄 번호 외에도 텍스트 패턴을 사용하여 주소를 지정할 수도 있습니다. 예를 들어 다음 예제는 문자열과 일치 한 후 텍스트를 추가합니다.The Alchemist.
[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 234
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
일치하는 패턴이 여러 개인 경우 일치 할 때마다 텍스트가 추가됩니다. 다음 예는이 시나리오를 보여줍니다.
[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
7) Adultry, Paulo Coelho, 234
3) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 234
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
7) Adultry, Paulo Coelho, 234
5) The Pilgrimage, Paulo Coelho, 288
7) Adultry, Paulo Coelho, 234
6) A Game of Thrones, George R. R. Martin, 864
변경 명령
SED는 change 또는 replacec로 표시되는 명령. 이 명령은 기존 줄을 새 텍스트로 바꾸는 데 도움이됩니다. 행 범위가 제공되면 모든 행이 단일 텍스트 행으로 그룹으로 대체됩니다. 다음은 change 명령의 구문입니다.
[address1[,address2]]c\
Replace text
세 번째 줄을 다른 텍스트로 바꾸겠습니다.
[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) Adultry, Paulo Coelho, 324
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
SED는 또한 패턴을 주소로 허용합니다. 다음 예에서는 패턴 일치가 성공하면 줄이 바뀝니다.
[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) Adultry, Paulo Coelho, 324
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
SED는 또한 여러 라인을 단일 라인으로 교체 할 수 있습니다. 다음 예제에서는 네 번째부터 여섯 번째까지의 줄을 제거하고 새 텍스트로 바꿉니다.
[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) Adultry, Paulo Coelho, 324
명령 삽입
insert 명령은 append와 같은 방식으로 작동합니다. 유일한 차이점은 특정 위치 앞에 줄을 삽입한다는 것입니다. 다음은 insert 명령의 구문입니다.
[address]i\
Insert text
몇 가지 예를 통해 insert 명령을 이해하겠습니다. 다음 명령은 네 번째 줄 앞에 새 항목을 삽입합니다.
[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 324
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
위의 예에서 4 위치 번호입니다. i 삽입 명령을 의미하고 나머지 부분은 삽입 할 텍스트입니다.
파일 시작 부분에 텍스트를 삽입하려면 줄 주소를 다음과 같이 제공하십시오. 1. 다음 명령은이를 설명합니다.
[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
7) Adultry, Paulo Coelho, 324
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
또한 여러 줄을 삽입 할 수 있습니다. 다음 명령은 마지막 줄 앞에 두 줄을 삽입합니다.
[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
8) Eleven Minutes, Paulo Coelho, 304' books.txt
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage,Paulo Coelho, 288
7) Adultry, Paulo Coelho, 324
8) Eleven Minutes, Paulo Coelho, 304
6) A Game of Thrones, George R. R. Martin, 864
삽입 할 항목은 별도의 줄에 입력되고 백 슬래시 (\) 문자로 구분됩니다.
번역 명령
SED는 문자를 번역하는 명령을 제공하며 다음과 같이 표시됩니다. y. 위치에 따라 캐릭터를 변형합니다. 다음은 translate 명령의 구문입니다.
[address1[,address2]]y/list-1/list-2/
번역은 문자의 위치를 기반으로합니다. list 1 같은 위치에있는 캐릭터에게 list 2두 목록 모두 명시 적 문자 목록이어야합니다. 정규식 및 문자 클래스는 지원되지 않습니다. 또한 크기list 1 과 list 2 동일해야합니다.
다음 예제는 아라비아 숫자를 로마 숫자로 변환합니다.
[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
I V IV XX
l 명령
공백으로 구분 된 단어와 탭 문자로 구분 된 단어를 보는 것만으로 구분할 수 있습니까? 확실히. 그러나 SED는 당신을 위해 이것을 할 수 있습니다. SED는l텍스트에 숨겨진 문자를 표시하는 명령입니다. 예를 들어, 탭 문자\t 및 End-Of-Line with $캐릭터. 아래에 주어진 구문은l 명령.
[address1[,address2]]l
[address1[,address2]]l [len]
데모 용 탭 문자가있는 파일을 만들어 보겠습니다. 단순화를 위해 공백을 탭으로 대체하여 동일한 파일을 사용할 것입니다. 기다림! 하지만 어떻게할까요? 텍스트 편집기에서 파일을 열고 각 공간을 탭으로 바꾸는 방법은 무엇입니까? 확실히! 이를 위해 SED 명령을 사용할 수 있습니다.
[jerry]$ sed 's/ /\t/g' books.txt > junk.txt
이제 숨겨진 문자를 l 명령:
[jerry]$ sed -n 'l' junk.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$
3)\tThe\tAlchemist,Paulo\tCoelho,197$
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$
5)\tThe\tPilgrimage,Paulo\tCoelho,288$
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$
다른 SED 명령과 마찬가지로 줄 번호와 패턴도 주소로 허용합니다. 직접 시도해 볼 수 있습니다.
SED의 또 다른 흥미로운 기능을 자세히 살펴 보겠습니다. 특정 문자 수 후에 줄 바꿈을 수행하도록 SED에 지시 할 수 있습니다. 다음 예제는 25 자 뒤에 줄을 바꿉니다.
[jerry]$ sed -n 'l 25' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords,Geo\
rge R. R. Martin,1216$
2) The Two Towers,J. R. \
R. Tolkien,352$
3) The Alchemist,Paulo C\
oelho,197$
4) The Fellowship of the\
Ring,J. R. R. Tolkien,4\
32$
5) The Pilgrimage,Paulo \
Coelho,288$
6) A Game of Thrones,Geo\
rge R. R. Martin ,864$
위의 예에서 랩 제한은 l 명령 뒤에 제공됩니다. 이 경우 25 자입니다. 이 옵션은 GNU에 따라 다르며 SED의 다른 변형에서는 작동하지 않을 수 있습니다.
줄 바꿈 제한이 0이면 줄 바꿈 문자가 없으면 줄을 끊지 않습니다. 다음의 간단한 명령이이를 보여줍니다.
[jerry]$ sed -n 'l 0' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords,George R. R. Martin,1216$
2) The Two Towers,J. R. R. Tolkien,352$
3) The Alchemist,Paulo Coelho,197$
4) The Fellowship of the Ring,J. R. R. Tolkien,432$
5) The Pilgrimage,Paulo Coelho,288$
6) A Game of Thrones,George R. R. Martin,864$
명령 종료
Quit 명령은 현재 실행 흐름을 종료하도록 SED에 지시합니다. 그것은q명령. 다음은 quit 명령의 구문입니다.
[address]q
[address]q [value]
quit 명령은 주소 범위를 허용하지 않으며 단일 주소 만 지원합니다. 기본적으로 SED는 읽기, 실행 및 반복 워크 플로를 따릅니다. 그러나 quit 명령이 발생하면 단순히 현재 실행을 중지합니다.
파일에서 처음 3 줄을 인쇄 해 보겠습니다.
[jerry]$ sed '3 q' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
줄 번호 외에도 텍스트 패턴을 사용할 수도 있습니다. 패턴 일치가 성공하면 다음 명령이 종료됩니다.
[jerry]$ sed '/The Alchemist/ q' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
이 외에도 SED는 value종료 상태로 사용할 수 있습니다. 다음 명령은 종료 상태를 100으로 표시합니다.
[jerry]$ sed '/The Alchemist/ q 100' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
이제 종료 상태를 확인하겠습니다.
[jerry]$ echo $?
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
100
읽기 명령
SED가 파일의 내용을 읽고 특정 조건이 일치 할 때 표시하도록 지시 할 수 있습니다. 명령은 알파벳으로 표시됩니다.r. 다음은 읽기 명령의 구문입니다.
[address]r file
사이에 정확히 하나의 공백이 있어야합니다. r 명령과 파일 이름.
간단한 예를 들어 이해합시다. 라는 샘플 파일을 만듭니다.junk.txt.
[jerry]$ echo "This is junk text." > junk.txt
다음 명령은 SED가 다음의 내용을 읽도록 지시합니다. junk.txt 세 번째 줄 뒤에 삽입합니다.
[jerry]$ sed '3 r junk.txt' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
위의 예에서 3은 라인 주소를 의미합니다. r 명령 이름이고 junk.txt내용이 표시 될 파일 이름입니다. 또한 GNU SED는 주소 범위도 허용합니다. 예를 들어 다음 명령은junk.txt 세 번째, 네 번째 및 다섯 번째 줄 이후.
[jerry]$ sed '3, 5 r junk.txt' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
This is junk text.
5) The Pilgrimage, Paulo Coelho, 288
This is junk text.
6) A Game of Thrones, George R. R. Martin, 864
다른 SED 명령과 마찬가지로 read 명령도 패턴을 주소로 받아들입니다. 예를 들어 다음 명령은junk.txt 패턴 일치가 성공할 때.
[jerry]$ sed '/Paulo/ r junk.txt' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
This is junk text.
6) A Game of Thrones, George R. R. Martin, 864
명령 실행
다음을 사용하여 SED에서 외부 명령을 실행할 수 있습니다. execute명령. 다음과 같이 표현됩니다.e. 다음은 실행 명령의 구문입니다.
[address1[,address2]]e [command]
간단한 예제로 실행 명령을 설명해 보겠습니다. 다음 SED 명령은 UNIX를 실행합니다.date 세 번째 줄 앞에 명령.
[jerry]$ sed '3 e date' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
Sun Sep 7 18:04:49 IST 2014
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
다른 명령과 마찬가지로 패턴도 주소로 받아들입니다. 예를 들어, 다음 예제는date패턴 일치가 성공하면 명령. 각 패턴 일치 후 먼저 명령이 실행 된 다음 패턴 버퍼의 내용이 표시됩니다.
[jerry]$ sed '/Paulo/ e date' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
Sun Sep 7 18:06:04 IST 2014
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
Sun Sep 7 18:06:04 IST 2014
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
구문을 관찰하면 e 신중하게 명령하면 command선택 사항입니다. 이후에 명령이 제공되지 않은 경우e,패턴 버퍼의 내용을 외부 명령으로 처리합니다. 이를 설명하기 위해 몇 가지 간단한 명령으로 commands.txt 파일을 생성 해 보겠습니다.
[jerry]$ echo -e "date\ncal\nuname" > commands.txt
[jerry]$ cat commands.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
date
cal
uname
파일의 명령은 자명합니다. 부재시command 후 e,SED는 이러한 모든 명령을 하나씩 실행합니다. 다음의 간단한 예가이를 보여줍니다.
[jerry]$ sed 'e' commands.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
Sun Sep 7 18:14:20 IST 2014
September 2014
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Linux
다른 SED 명령과 마찬가지로 실행 명령도 모든 유효한 주소 범위를 허용합니다.
기타 명령
기본적으로 SED는 단일 회선에서 작동하지만 여러 회선에서도 작동 할 수 있습니다. 여러 줄 명령은 대문자로 표시됩니다. 예를 들어,n 명령, N명령은 패턴 공간을 지우고 인쇄하지 않습니다. 대신 현재 패턴 공간의 끝에 줄 바꿈 (\ n)을 추가하고 입력 파일의 다음 줄을 현재 패턴 공간에 추가하고 나머지 SED 명령을 실행하여 SED의 표준 흐름을 계속합니다. 아래에 주어진 구문은N 명령.
[address1[,address2]]N
쉼표로 구분 된 도서 제목 및 해당 저자 목록을 인쇄 해 보겠습니다. 다음 예는이를 설명합니다.
[jerry]$ sed 'N; s/\n/, /g' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
A Storm of Swords, George R. R. Martin
The Two Towers, J. R. R. Tolkien
The Alchemist, Paulo Coelho
The Fellowship of the Ring, J. R. R. Tolkien
The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin
위의 예가 어떻게 작동하는지 이해합시다. 그만큼N명령은 첫 번째 줄, 즉 A Storm of Swords를 패턴 버퍼로 읽고 \ n 다음에 다음 줄을 추가합니다. 이제 패턴 공간에 A Storm of Swords가 포함됩니다.\n조지 RR 마틴. 다음 단계에서는 개행 문자를 쉼표로 바꿉니다.
처럼 p 명령, 우리는 P 명령에 의해 생성 된 여러 줄 패턴 공간의 첫 번째 부분 (포함 된 줄 바꿈까지)을 인쇄하는 명령 N명령. 아래에 주어진 구문은P 다음과 유사한 명령 p 명령.
[address1[,address2]]P
이전 예에서 우리는 N명령은 줄 바꿈으로 구분 된 책 제목 및 저자 목록을 만듭니다. 첫 번째 부분, 즉 책의 제목 만 인쇄합시다. 다음 명령은이를 설명합니다.
[jerry]$ sed -n 'N;P' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
A Storm of Swords
The Two Towers
The Alchemist
The Fellowship of the Ring
The Pilgrimage
A Game of Thrones
부재시 N, 그것은 p명령. 다음 간단한 명령은이 시나리오를 보여줍니다.
[jerry]$ sed -n 'P' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
A Storm of Swords
George R. R. Martin
The Two Towers
J. R. R. Tolkien
The Alchemist
Paulo Coelho
The Fellowship of the Ring
J. R. R. Tolkien
The Pilgrimage
Paulo Coelho
A Game of Thrones
George R. R. Martin
이 외에도 SED는 v버전을 확인하는 명령. 제공된 버전이 설치된 SED 버전보다 크면 명령 실행이 실패합니다. 이 옵션은 GNU에만 적용되며 다른 SED 변형에서는 작동하지 않을 수 있습니다. 아래에 주어진 구문은v 명령.
[address1[,address2]]v [version]
먼저 SED의 현재 버전을 찾으십시오.
[jerry]$ sed --version
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
sed (GNU sed) 4.2.2
다음 예에서 SED 버전은 버전 4.2.2보다 높으므로 SED 명령이 실행을 중단합니다.
[jerry]$ sed 'v 4.2.3' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
sed: -e expression #1, char 7: expected newer version of sed
그러나 제공된 버전이 버전 4.2.2보다 작거나 같으면 명령이 예상대로 작동합니다.
[jerry]$ sed 'v 4.2.2' books.txt
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
A Storm of Swords
George R. R. Martin
The Two Towers
J. R. R. Tolkien
The Alchemist
Paulo Coelho
The Fellowship of the Ring
J. R. R. Tolkien
The Pilgrimage
Paulo Coelho
A Game of Thrones George R. R. Martin