리눅스에서 Sed를 사용하는 방법
Sed는 파일을 만들거나 편집하지 않는 간단한 UNIX 프로그램입니다. 입력을 통과하는 데이터만 수정하고 수정된 데이터를 출력에 표시합니다. 여기서 UNIX 철학에 대한 간략한 개요를 살펴보고, 사용의 기본 사항을 살펴보고 sed
, 일상적인 작업에 프로그램을 사용하는 방법의 예를 보여드리겠습니다.
Sed 사용의 기본
Sed는 텍스트 데이터 스트림을 읽고 수정할 수 있는 프로그램입니다. 즉, 일반 텍스트 편집기와 달리 sed는 컴퓨터의 파일을 직접 변경하지 않습니다. 대신 들어오는 데이터에 대한 “필터” 역할을 하며 원하는 대로 변환할 수 있습니다.
sed를 시작하려면 먼저 최소 5줄의 텍스트가 있는 파일을 만드세요. 줄 사이에 “줄바꿈” 문자가 있는지 확인하세요.
sed의 일반 명령은 다음과 같습니다.
sed에서 가장 기본적인 기능 중 하나는 n
하위 명령입니다. 이 명령은 sed의 입력에서 데이터를 읽어 프로그램의 “패턴 공간”에 배치하여 작동합니다. 이것은 sed가 조작하기 전에 들어오는 텍스트를 보관하는 특수 버퍼입니다.
sed의 또 다른 기본 기능은 p
하위 명령입니다. 와 유사하게 n
sed의 입력에서 들어오는 데이터를 읽고 프로그램의 패턴 공간에 배치합니다. 그러나 터미널의 출력에도 명시적으로 인쇄합니다.
하위 명령을 사용하는 것은 p
초보자에게 혼란스러울 수 있습니다. 텍스트 입력으로 실행하면 sed가 출력을 두 번 인쇄하기 때문입니다. 이는 기본적으로 sed가 패턴 공간이 있는지 p
없는지에 관계없이 자동으로 패턴 공간을 인쇄하기 때문입니다.
이 기발한 동작을 비활성화하려면 -n
sed 하위 명령을 실행하기 전에 플래그를 추가하세요.
기본 사항을 알아본 후, 다음 섹션에서는 sed를 사용하여 텍스트 데이터를 조작하는 다양한 방법을 살펴보겠습니다.
1. 텍스트 스트림 선택 및 트리밍
인쇄 외에도 sed를 사용하여 데이터 스트림과 파일에서 텍스트를 선택하고 트리밍할 수도 있습니다. 이를 수행하는 가장 쉬운 방법은 p
하위 명령에 범위 값을 추가하는 것입니다.
다음 명령은 sed의 범위 구문을 사용하여 “hello.txt” 파일의 세 번째에서 다섯 번째 줄을 인쇄합니다.
p
또한 하위 명령을 사용하여 텍스트에서 인접하지 않은 줄을 인쇄 할 수 있습니다 . 예를 들어, 다음은 “hello.txt” 파일의 첫 번째와 네 번째 줄을 인쇄합니다.
2. Sed 스트림에서 텍스트 제거
Sed는 들어오는 모든 텍스트 스트림에서 데이터를 삭제할 수도 있습니다. 이는 큰 파일에서 몇 줄의 텍스트를 제거하거나 프로그램의 출력을 정리하여 필요한 정보만 표시하려는 경우에 유용합니다.
이렇게 하려면 d
삭제하려는 특정 줄이나 범위와 함께 하위 명령을 사용합니다.
텍스트 줄을 인쇄하는 것과 비슷하게 d
하위 명령은 여러 줄 범위에서 작동합니다. 예를 들어, 다음 명령은 “hello.txt” 파일에서 처음 네 줄을 삭제합니다.
특정 줄 범위를 일치시키는 것 외에도 정규 표현식을 사용하여 삭제하려는 텍스트를 찾을 수 있습니다. 이렇게 하면 sed가 “world”라는 단어가 포함된 줄을 찾아서 삭제하도록 지시합니다.
정규 표현식을 입력 파일의 범위로 처리할 수도 있습니다. 이렇게 하면 프로그램 내에서 선택 사항을 정의하는 데 더 많은 유연성을 얻을 수 있습니다.
3. Sed Streams에 새 텍스트 추가
sed는 텍스트 삭제 외에도 기존 데이터 스트림에 새 텍스트를 추가할 수도 있습니다. 본격적인 텍스트 편집기 수준은 아니지만, 이 기능은 일회성 편집 및 기본 텍스트 추가에 여전히 유용할 수 있습니다.
새 줄의 텍스트를 추가하려면 다음 a
명령어 뒤에 추가하려는 텍스트를 입력하여 sed를 실행합니다.
sed 텍스트 스트림에 전체 파일을 포함하는 것도 가능합니다. 그러려면 명령어 r
뒤에 추가하려는 파일 이름을 입력하세요.
4. Sed에서 텍스트 찾기 및 바꾸기
sed의 가장 강력한 기능 중 하나는 텍스트 스트림에서 텍스트를 찾아 바꿀 수 있는 기능입니다. 텍스트를 추가하고 삭제하는 것과 달리, 이를 통해 UNIX 파이프를 통과하는 데이터를 동적으로 편집할 수 있어 일반 텍스트 편집기에 비해 훨씬 더 유연합니다.
sed에서 아무런 수정 없이 텍스트 입력을 인쇄해 테스트해 보세요.
p
하위 명령을 로 바꾼 s
다음, 뒤에 세 개의 백슬래시(/)를 추가합니다.
첫 번째와 두 번째 백슬래시 사이에 일치시키고 싶은 문자열의 구조적 정규 표현식을 삽입합니다. 예를 들어, 입력 문자열에서 “wo”로 시작하는 단어를 찾기 위해 다음 값을 넣을 수 있습니다.
두 번째와 세 번째 백슬래시 사이에 텍스트 커서를 놓은 다음, 매치를 대체할 텍스트를 제공합니다. 이전 열과 달리 이 섹션에서는 구조적 정규 표현식을 사용하지 않습니다.
기본적으로 sed는 특정 줄에서 일치하는 첫 번째 문자열만 바꿉니다. 텍스트 스트림에서 단어의 모든 인스턴스를 바꾸려는 경우 문제가 될 수 있습니다. 이를 수정하려면 g
표현식의 세 번째 백슬래시 뒤에 옵션을 추가합니다.
5. 텍스트 데이터를 홀드 공간에 복사
Sed는 텍스트 데이터를 저장하기 위해 두 개의 버퍼를 사용합니다. 패턴 공간과 홀드 공간입니다. 전자는 sed 표현식을 거치는 동안 텍스트의 임시 공간 역할을 합니다. 반면 후자는 임의의 텍스트 데이터를 저장할 수 있는 클립보드 역할을 합니다.
이 접근 방식의 한 가지 이점은 외부 프로그램에 의존하지 않고도 특정 출력을 “보관”할 수 있다는 것입니다. 이는 sed를 사용하여 여러 단계의 텍스트 조작을 처리할 계획이라면 유용할 수 있습니다.
보류 공간을 사용하려면 먼저 텍스트가 몇 줄 이상 들어 있는 파일이 있는지 확인하세요.
p
하위 명령을 로 바꾼 다음 h
, sed가 파일에서 일치시킬 줄 번호나 정규식 값을 제공합니다. 이렇게 하면 sed가 해당 텍스트 줄을 가져와서 보류 공간에 복사하도록 지시합니다.
하위 명령 을 사용하여 보류 공간 내에 여러 줄의 텍스트를 저장할 수도 있습니다 H
. 예를 들어, 다음 명령은 내 텍스트 파일의 세 번째와 네 번째 줄을 저장하고 터미널에 다시 인쇄합니다.
6. Sed에서 레이블을 사용하여 루프 만들기
sed는 포괄적인 프로그래밍 언어는 아니지만, 프로그램 내부에 루프를 만드는 것은 여전히 가능합니다. 특정 텍스트 입력을 지속적으로 살펴봐야 하는 sed 표현식이 필요한 경우 유용합니다.
sed에서 루프를 만들려면 먼저 sed 표현식에 대한 레이블을 만들어야 합니다. 그러려면 :
표현식에 사용하려는 레이블 뒤에 하위 명령을 사용해야 합니다.
sed 표현식에 대한 일치 기준을 제공하세요. 제 경우에는 입력 텍스트의 모든 줄의 끝으로 이동하고 싶습니다.
sed가 매치를 찾을 때마다 실행하려는 sed 하위 명령을 입력한 다음 중괄호로 묶습니다. 다음은 인접한 두 줄을 연결하고 줄바꿈 문자를 공백으로 바꾼 다음 표현식의 시작 부분으로 돌아갑니다.
이것을 확장하여 거의 모든 종류의 입력 텍스트와 일치시킬 수도 있습니다. 예를 들어, 다음 명령은 sed의 확장된 정규식 기능을 사용하여 입력 텍스트에서 HTML 태그를 제거합니다.
7. Sed에서 영구적인 변경 사항 만들기
다른 모든 UNIX 도구와 마찬가지로 sed는 출력 리디렉션과 파이프를 활용할 수 있습니다. 이를 통해 sed를 다른 프로그램과 연결할 수 있을 뿐만 아니라 변경 사항을 영구적으로 만들 수 있는 기회도 제공합니다.
다음 코드 줄은 sed 명령의 출력에서 새 “welcome.txt” 파일을 만듭니다.
출력 리디렉션 외에도 내장 -i
플래그를 사용하여 터미널 콘솔에서 변경 사항을 출력하는 대신 현재 파일을 편집할 수도 있습니다. 예를 들어, 다음 명령은 내 텍스트 파일에서 모든 줄 바꿈 문자를 제거하고 저장합니다.
이 모든 이야기가 Linux 명령줄에 대한 호기심을 불러일으켰다면, 오늘 사용할 수 있는 가장 흥미로운 Bash 프롬프트에 대해 이야기한 이전 기사를 읽어보세요.
이미지 출처: Morgan Richardson via Unsplash . 모든 변경 사항과 스크린샷은 Ramces Red가 제공했습니다.
답글 남기기