분류 기타

Sed 텍스트 편집기 사용법 배우기

컨텐츠 정보

  • 조회 469 (작성일 )

본문

Sed는 일반적인 텍스트 상자가 없고 대신 사용자 명령에 따라 파일에 직접 씁니다.


AT&T의 원래 Unix 운영 체제 버전 7용으로 만들어진 sed 명령은 그 이후로 아마도 모든 Unix 및 Linux OS에 포함되었습니다. 

sed 애플리케이션은 스트림 편집기이며 텍스트 편집기와 달리 처리를 위해 파일 데이터가 로드되는 시각적 버퍼를 열지 않습니다. 

대신 터미널에 입력된 명령이나 스크립트의 일련의 명령에 따라 파일에서 한 줄씩 작동합니다.


설치 


Linux, BSD 또는 macOS를 사용하는 경우 이미 GNU 또는 BSD sed가 설치되어 있습니다. 이는 원래 sed 명령어를 두 가지 고유하게 다시 구현한 것으로, 유사하지만 약간의 차이가 있을 수 있습니다. 

GNU sed는 일반적으로 가장 기능이 풍부한 sed로 간주되며 이러한 플랫폼에서 널리 사용할 수 있습니다.


GNU sed(Linux가 아닌 시스템에서는 종종 gsed라고도 함)를 찾을 수 없는 경우 GNU 웹사이트에서 소스 코드를 다운로드할 수 있습니다. GNU sed를 설치하면 좋은 점은 추가 기능에 사용할 수 있지만 이식성이 필요한 경우 sed의 POSIX 사양만 따르도록 제한할 수도 있다는 것입니다.


Windows에서는 초콜릿과 함께 GNU sed를 설치할 수 있습니다.


Sed 작동 방식 


sed 애플리케이션은 한 번에 한 줄에서 작동합니다. 시각적 표시가 없기 때문에 패턴 공간, 즉 입력 스트림의 현재 줄을 포함하는 메모리 공간(후행 줄 바꿈 문자가 제거됨)을 만듭니다. 패턴 공간이 채워지면 sed에 대한 명령이 실행됩니다. 

명령이 조건부일 때도 있고 절대적일 때도 있습니다. 따라서 이러한 명령의 결과는 sed를 사용하는 방법에 따라 다릅니다.


명령 끝에 도달하면 sed는 패턴 공간의 내용을 출력 스트림에 인쇄합니다. 기본 출력 스트림은 stdout이지만 --in-place=.bak 옵션을 사용하여 파일로 리디렉션하거나 동일한 파일로 다시 돌아갈 수도 있습니다.


그런 다음 사이클은 다음 입력 라인에서 다시 시작됩니다.


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


sed --options [optional SCRIPT] [INPUT FILE or STREAM] 


편집할 내용 찾기 


시각적 편집기에서는 일반적으로 크게 생각하지 않고 텍스트 파일에서 변경하려는 내용을 찾습니다. 눈(또는 스크린 리더)이 텍스트를 스캔하고 변경하려는 단어 또는 텍스트를 삽입하거나 제거하려는 위치를 찾은 다음 입력을 시작하기만 하면 됩니다. 그러나 sed에는 대화형 모드가 없으므로 특정 명령을 실행하기 위해 충족되어야 하는 조건을 알려야 합니다.


이 예에서는 example.txt라는 파일에 다음 텍스트가 포함되어 있다고 가정합니다.


hello
world
This is line three.
Here is the final line. 


Line number 


줄 번호를 지정하면 sed가 파일의 특정 줄에서만 작동하도록 지시합니다.


예를 들어, 이 명령은 파일의 1행을 선택하고 인쇄합니다. 처리 후 sed의 기본 동작도 stdout에 한 줄을 인쇄하는 것이기 때문에 첫 번째 줄을 복제하는 효과가 있습니다.


sed ‘1p’ example.txt
hello
hello
world
This is line three.
Here is the final line. 


줄 번호를 단계적으로 지정할 수도 있습니다. 예를 들어 1~2는 2줄마다 선택되었음을 나타냅니다('첫 번째 줄부터 두 번째 줄마다 선택'). 지침 1~3은 첫 번째 줄 다음에 세 번째 줄마다 선택하라는 의미입니다.


sed ‘1p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
Here is the final line. 


Line position 


$를 선택기로 사용하여 파일의 마지막 줄에서만 작업할 수 있습니다.


sed ‘$p’ example.txt
hello
world
This is line three.
Here is the final line.
Here is the final line. 


GNU sed에서는 한 줄 이상을 선택할 수 있습니다(예: sed '1,$p'는 첫 번째 줄과 마지막 줄을 인쇄함).


Negation 


숫자나 위치로 선택하면 느낌표(!) 문자로 반전할 수 있습니다. 이렇게 하면 첫 번째 줄을 제외한 모든 줄이 선택됩니다.


sed ‘1!p’ example.txt
hello
world
world
This is line three.
This is line three.
Here is the final line.
Here is the final line. 


Pattern matching 


패턴 일치는 워드 프로세서나 브라우저에서 찾기 작업으로 생각할 수 있습니다. 단어(패턴)를 제공하면 결과가 선택됩니다. 패턴 일치 구문은 /pattern/입니다.


sed ‘/hello/p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
sed ‘/line/p’ example.txt
hello
world
This is line three.
This is line three.
Here is the final line.
Here is the final line. 


Sed로 편집하기 


편집할 항목을 찾으면 원하는 작업을 수행할 수 있습니다. 명령과 함께 sed로 편집을 수행합니다. sed의 명령어는 sed 명령어 자체와 다릅니다. 도움이 된다면 "행동", "동사" 또는 "지시"라고 생각하십시오.


sed의 명령어는 이전 예에서 사용된 p for print 명령어와 같이 단일 문자입니다. 처음에는 기억하기 어려울 수 있지만 모든 것이 그렇듯이 연습을 통해 알게 됩니다.


p for print 


p 명령어는 현재 패턴 공간에 있는 모든 것을 인쇄합니다.


d for delete 


d 명령어는 패턴 공간을 삭제합니다.


sed ‘$d’ example.txt
hello
world
This is line three.
sed ‘1d’ example.txt
world
This is line three.
Here is the final line. 


s for search and replace 


s 명령어는 패턴을 검색하여 다른 패턴으로 바꿉니다. 이것은 아마도 sed의 가장 인기 있고 일상적인 사용이며 사용자가 배우는 첫 번째(때로는 유일한) sed 명령입니다. 거의 확실히 텍스트 편집에 가장 유용한 명령입니다.


sed ‘s/world/opensource.com/
hello
opensource.com
This is line three.
Here is the final line. 


대체 텍스트에도 사용할 수 있는 특수 기능이 있습니다. 예를 들어 \L은 대체 텍스트를 소문자로 변환하고 \l은 다음 문자에 대해서만 동일한 작업을 수행합니다. sed 문서에 나열된 다른 것들이 있습니다(info sed 명령으로 볼 수 있습니다).


대체 절의 특수 문자 &는 일치하는 패턴을 나타냅니다.


sed ‘s/is/\U&/’ example.txt
hello
world
ThIS is line three.
Here IS the final line. 


또한 특수 플래그를 전달하여 찾은 항목을 처리하는 방법에 영향을 줄 수 있습니다. g(전역, 아마도) 플래그는 첫 번째 일치뿐만 아니라 줄에서 찾은 모든 일치에 대체를 적용하도록 지시합니다.


sed ‘s/is/\U&/g’ example.txt
hello
world
ThIS IS line three.
Here IS the final line. 


다른 중요한 플래그에는 영향을 미칠 일치 패턴의 발생을 나타내는 숫자가 포함됩니다.


sed ‘s/is/\U&/2’ example.txt
hello
world
This IS line three.
Here is the final line. 


파일 이름이 뒤따르는 w 플래그는 변경 사항이 있는 경우에만 파일에 일치하는 줄을 씁니다.


sed ‘s/is/\U&/w sed.log’ example.txt
hello
world
ThIS is line three.
Here IS the final line.
cat sed.log
ThIS is line three.
Here IS the final line. 


플래그를 결합할 수 있습니다.


sed ‘s/is/\U&/2w sed.log’ example.txt
hello
world
This IS line three.
Here is the final line.
cat sed.log
This IS line three. 


Scripts 


sed "one-liners"가 있는 훌륭한 사이트가 많이 있습니다. 일반적인 문제를 해결하기 위해 작업 지향적인 sed 명령을 제공합니다. 그러나 스스로 sed를 배우면 자신만의 단일 라이너를 작성할 수 있으며 특정 요구 사항에 맞게 조정할 수 있습니다.


sed용 스크립트는 터미널에서 줄로 작성하거나 파일에 저장하고 sed 자체로 실행할 수 있습니다. 실생활에서 sed 명령을 거의 재사용하지 않기 때문에 작은 스크립트를 모두 하나의 명령으로 작성하는 경향이 있습니다. sed 스크립트를 작성할 때 일반적으로 하나의 파일에 대해 매우 구체적입니다. 예를 들어, 바로 이 기사의 초안을 작성한 후 sed를 사용하여 "sed"의 대소문자를 표준화했으며, 이는 아마도 다시는 하지 않을 작업일 것입니다.


세미콜론(;)으로 구분된 일련의 고유한 명령을 sed에 실행할 수 있습니다.


sed ‘3t ; s/line/\U&/’ example.txt
hello
world
This is LINE three.
This is the final line. 


중괄호로 범위 변경 


중괄호({})로 영향을 받는 결과를 제한할 수도 있습니다. sed 명령을 중괄호로 묶으면 특정 선택 항목에만 적용됩니다. 예를 들어, "line"이라는 단어는 샘플 텍스트의 두 줄에 나타납니다. 필수 일치 조건(최종 줄을 나타내는 $)을 선언하고 바로 뒤에 수행하려는 s 명령을 중괄호 안에 넣어 sed가 마지막 줄에만 영향을 미치도록 할 수 있습니다.


sed ‘$ {s/line/\U&/}’ example.txt
hello
world
This is line three.
This is the final LINE. 


Sed 배우기 


이 기사에서 설명하는 것보다 sed로 더 많은 일을 할 수 있습니다. 분기(b), 테스트(t), 홀드 공간(H) 및 기타 여러 기능도 사용하지 못했습니다. ed와 마찬가지로 sed는 문서 생성이나 수행해야 하는 모든 스크립트 작업에 사용할 텍스트 편집기는 아니지만 POSIX 사용자에게 있는 강력한 옵션입니다. sed 명령이 구조화되는 방법과 짧은 스크립트를 작성하는 방법을 배우면 방대한 양의 텍스트를 빠르게 변경할 수 있습니다. GNU sed의 정보 페이지 또는 BSD sed의 매뉴얼 페이지를 읽고 sed가 무엇을 할 수 있는지 알아보세요.


출처 : https://opensource.com/article/20/12/sed


Sed