또 다른 텍스트 편집 작업을 수행하기 위한 다른 방법을 찾고 계셨나요? 더 이상 찾을 필요가 없습니다! 이 튜토리얼에서는 스트림 에디터 sed 예제로 여러분을 도와드리겠습니다.
간단히 말해, sed는 비대화식 방식으로 파일과 텍스트 스트림에서 다양한 편집 작업을 수행할 수 있도록 해줍니다. 명령을 호출하는 동안 편집 결정을 내릴 수 있습니다. 이 튜토리얼에서는 sed 명령어를 사용하는 방법을 배우고 작업 흐름을 효과적으로 관리하는 방법을 익힐 수 있습니다.
계속 읽어보고 명령 줄 기술을 강화하세요!
필수 사항
이 튜토리얼에서 실습을 따라하기 위해 다음 사항들이 필요합니다:
- A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
- A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.
Ubuntu에 sed 설치하기
sed는 일반적으로 리눅스와 macOS를 포함한 대부분의 유닉스 유사 운영 체제에 기본적으로 포함되어 있습니다. 그러나 그럼에도 불구하고 텍스트 변환을 수행하기 전에 시스템에 이미 sed가 있는지 확인하는 것은 기본 절차이므로 확인하는 것이 좋습니다.
1. 터미널을 열고 아래의 sed
명령어를 실행하여 시스템에 설치된 sed 버전을 확인합니다.
sed가 설치되어 있다면, 아래와 같이 sed 버전 번호와 빌드에 대한 일부 정보가 표시됩니다.

그렇지 않으면 sed가 설치되어 있지 않으면 아래와 같은 오류 메시지가 표시됩니다.
이 오류 메시지는 시스템의 PATH 환경 변수에서 sed
명령을 찾을 수 없음을 나타냅니다.

2. 다음으로, 시스템에 sed
를 업데이트하고 설치하려면 아래 명령을 실행하십시오. [apt-get update
이 명령은 구성된 패키지 소스에서 최신 패키지 정보를 가져오며 패키지의 종속성, 파일 및 스크립트를 포함합니다. 이 명령을 실행하면 최신 버전의 sed 및 필요한 다른 패키지를 설치할 수 있습니다.

3. 마지막으로 다음 명령을 실행하여 시스템에 sed
명령이 설치되었는지 확인하십시오.
이 명령은 sed 실행 파일의 전체 경로를 출력하며 이 예제에서는 /usr/bin/sed입니다.
sed를 설치하고 PATH에 있는지 확인한 후에는 sed
명령을 사용하여 다양한 텍스트 변환 및 조작을 수행할 수 있습니다.

텍스트 파일에서 문자열 교체
sed는 대부분의 Unix류 운영 체제에서 사용할 수 있는 인기있는 스트림 편집기이며 sed의 가장 편리한 기능 중 하나는 텍스트 파일에서 문자열을 교체하는 것입니다.
아래는 문자열 교체가 도움이 되는 몇 가지 시나리오입니다.
- 새 도메인 이름을 반영하기 위해 URL 목록을 업데이트합니다.
- 데이터베이스나 CSV 파일에서 제품 ID를 변경합니다.
- 다른 시스템으로 가져올 데이터를 형식화하고 기타 등등입니다.
sed를 사용하는 기본 구문은 다음과 같습니다. 여기서:
Placeholder | Function |
---|---|
command | Controls sed’s behavior. |
options | Allows you to customize the behavior of the sed command |
input_file | Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works. |
output_file | Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed. |
urls.txt라는 텍스트 파일이 있다고 가정하고, 모든 URL을 새 도메인 이름을 사용하도록 업데이트하려고 합니다.
1. 아래의 echo 명령을 실행하여 현재 디렉토리에 urls.txt 파일을 생성합니다. 이 명령은 출력을 제공하지 않고 지정된 텍스트를 파일에 작성합니다.
2. 다음으로, cat 명령을 실행하여 urls.txt 파일의 내용을 확인합니다. cat urls.txt
아래의 출력은 urls.txt 파일에 작성된 세 개의 이전 URL을 확인합니다.

3. 이제 아래의 명령을 실행하여 urls.txt 파일에서 문자열 old-domain.com의 모든 발생을 찾아서 (s
) new-domain.com으로 대체합니다.
입력 파일의 URL이 새 도메인으로 업데이트된 것을 확인할 수 있습니다.

문자열의 N번째 발생 대체
기본 검색 및 대체 기능 외에도, sed에는 보다 복잡한 텍스트 변환을 수행할 수 있는 내장된 추가 명령이 있습니다. 이 중 하나는 단일 텍스트 줄에서 패턴 문자열의 n번째 발생을 대체하는 경우입니다.
예를 들어, CSV 파일의 두 번째 필드를 새 값으로 업데이트하거나 데이터베이스 덤프의 세 번째 발생을 업데이트하려는 경우입니다.
다음 명령의 기본 구문은 다음과 같습니다. 여기서:
pattern
– 교체할 문자열입니다.replacement
– 교체에 사용할 문자열입니다.n
– is the nth occurrence of the string to replace (e.g.,1
=first occurrence,2
=second occurrence…).
문자열의 n번째 발생을 대체하는 방법을 보려면 다음 단계를 따르세요:
다음 echo
명령을 실행하여 quick
패턴의 세 번의 발생을 포함하는 텍스트 줄을 만듭니다. 그런 다음 sed
명령은 패턴 quick
의 두 번째 발생(2
)을 문자열 fast
로 대체합니다.
아래에서 볼 수 있듯이, 패턴 quick의 두 번째 발생만 문자열 fast로 대체되었으며, 다른 모든 발생은 변경되지 않았습니다.
nth
명령은 기본적으로 대소문자를 구분합니다. 따라서 명령은 패턴의 정확한 일치만을 찾습니다. 패턴의 대소문자를 무시하려면 다음 단계로 이동하세요.

?
nth
명령은 패턴의 발생을 왼쪽에서 오른쪽으로 세어 갑니다. 또한nth
명령은 한 줄의 텍스트에서만 작동합니다. 여러 줄에 대체를 수행하려면 다음 섹션에서 설명하는 다른 방법을 사용하세요.
다음으로, 대문자 소문자 구분 없이 (i
) 작업하는 텍스트와 함께 작업할 때 편리한 quick
패턴의 두 번째 발생을 fast
로 대체하는 명령을 실행하세요.
i
옵션은 대소문자가 일관되지 않는 텍스트 작업 시 유용합니다.
아래 출력에서, 단어 “빠른”의 두 번째 발생(QuiCk)이 대소문자에 관계없이 문자열 빠른으로 성공적으로 대체되었습니다.

일치하는 패턴/문자열의 모든 발생 대체
문자열의 n번째 발생을 대체하는 대신, 모든 발생을 대체할 계획인지도 모릅니다. 예를 들어 저작권 문자열의 모든 발생을 현재 연도로 대량 업데이트하는 계획을 할 때 이렇게 하는 것이 계획에 큰 도움이 됩니다.
1. 선호하는 텍스트 편집기에서 다음 내용이 포함된 input.txt 파일을 만듭니다.
This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.
2. 그런 다음 다음 명령을 실행하여 input.txt
파일에서 단어 빠른
의 모든 발생을 빠른
으로 대체합니다. 대체된 후 변경 사항은 output.txt
파일에 작성됩니다.
3. 이제 아래 명령을 실행하여 output.txt
파일의 내용을 보고 대체가 이루어졌는지 확인합니다.
아래와 같이 단어 빠른의 모든 발생이 빠른으로 대체되었습니다. nth
명령과 마찬가지로 g
명령은 대소문자를 구분하며 정확히 일치하는 것만 대체합니다.
빠른 문자열은 아래와 같이 대체되지 않지만, 대소문자 구분 없이 대체하려면 i
옵션을 사용할 수 있습니다.

지정된 행에서 일치하는 패턴 문자열 대체
아마도 이미 교체할 문자열이 있는 줄을 알고 계실 것입니다. 특정 줄에 있는 문자열을 교체할 수 있다면 모든 발생을 교체하는 대신 특정 줄에서 문자열을 교체하는 것이 더 유용할 수 있습니다. 이 기능은 파일이나 스트림의 특정 줄을 수정하되 다른 줄은 그대로 두고 싶을 때 유용합니다.
아래는 특정 줄에서 문자열을 교체하는 구문입니다. 여기서 n
은 줄 번호를 나타냅니다.
1. 다음 내용으로 myfile.txt라는 파일을 작성하세요.
test1
test2
test3
2. 그 다음, 아래의 sed
명령을 실행하여 다음 작업을 수행하세요:
myfile.txt
파일의 두 번째 줄(2
)에서 단어test2
를 검색합니다.단어test2
를test2_changed
로 교체합니다.변경 사항을myfile_changed.txt
라는 새 파일에 기록합니다.
This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.
3. 마지막으로 아래의 cat 명령을 실행하여 myfile_changed.txt
파일의 내용을 확인하세요.
아래에서 볼 수 있듯이, myfile.txt 파일의 두 번째 줄이 test2_changed로 교체되었고, 다른 모든 줄은 변경되지 않았습니다.

변경된 문자열의 줄만 출력하기
변경 사항을 만든 후 파일의 전체 내용을 출력하는 대신 변경된 줄만 출력하고 싶을 수도 있습니다. 어떻게 하면 될까요? -n
옵션과 함께 p
플래그를 사용하는 것으로 가능합니다.
아래는 변경된 문자열의 줄을 독점적으로 출력하는 구문입니다. 여기서:
-n
옵션은sed
가 기본 동작인 모든 줄을 출력하는 것을 억제하도록 지시합니다.- 코드 `
p
` 플래그는sed
명령의 출력을 인쇄하도록 지시합니다.
myfile.txt 파일을 열고 내용을 다음과 같이 바꿉니다. 두 번째 줄이 올바르지 않습니다. 왜냐하면 first
단어 대신 second
이어야 합니다.
This is the first line of my file.
This is the first line of my file.
This is the third line of my file.
이제 아래의 sed
명령을 실행하여 myfile.txt
의 두 번째 줄(2
)에서 문자열 first
를 second
로 대체하지만 수정된 줄만 출력합니다(p
).
아래와 같이 터미널에서 수정된 두 번째 줄의 출력만 확인하게 될 것입니다.

결론
이 튜토리얼에서 여러 가지 sed 사용 예제를 사용하여 검색 및 대체 작업을 수행했습니다. 더 나아가 특정 발생을 대체하거나 수정된 줄만 출력하는 것과 같은 고급 기술도 다뤘습니다.
sed는 여러 텍스트 조작 작업을 수행할 수 있는 강력한 명령 줄 도구입니다. 파일 전체에서 전역 대체를 수행하든 특정 라인에서 목표로 하는 대체를 수행하든 sed는 해결책이 될 것입니다.
이제 왜 정규 표현식에 대해 더 탐험하지 않으시겠습니까? 정규 표현식은 sed를 포함한 여러 텍스트 조작 도구에 필수적입니다. 이러한 표현식은 시간을 절약하고 노력을 덜어주는데 언제 사용하나요? 큰 양의 텍스트에서 복잡한 검색 및 대체 작업을 수행할 때입니다.