리눅스 명령어 sed는 “Stream Editor”의 약자로, 텍스트 스트림을 읽어들이며 특정 패턴을 찾고, 변환하거나 수정하는 데 사용합니다. 주로 대량의 텍스트 파일을 다루는 작업에서 효율적으로 사용할 수 있기 때문에, 개발자나 시스템 관리자에게 필수적인 도구입니다. 이번 포스팅에서는 sed
명령어의 기본적인 사용법과 주요 옵션에 대해 살펴보겠습니다.
목차
리눅스 명령어 sed의 기본 구조
sed
명령어는 기본적으로 아래와 같은 형식으로 사용됩니다:
sed [옵션] '명령어' 파일
ShellScript여기서 옵션
은 선택 사항이며, 명령어는 sed
가 수행할 작업을 정의합니다. 주로 사용하는 명령어는 s
(substitute, 대체)로, 특정 텍스트 패턴을 찾아 다른 텍스트로 바꾸는 역할을 합니다.
텍스트 치환
sed 's/기존텍스트/새로운텍스트/' 파일이름
ShellScript이 명령어는 파일에서 ‘기존텍스트’를 찾아 ‘새로운텍스트’로 바꿉니다. 만약 파일 내에 ‘기존텍스트’가 여러 번 등장한다면, 기본적으로 각 라인에서 첫 번째로 일치하는 텍스트만 대체됩니다.
Hello, Jacob! Hello, Mary!
Hello, Jemma! Hello, Davidson!
Hello, John! Hello, Jack!
PlaintextHello를 Hi로 바꾸도록 ‘s/Hello/Hi/’라고 입력하면 아래와 같이 각 줄의 처음 나타나는 Hello가 Hi로 변경되는 것을 확인할 수 있습니다.
명령어 g
(global)
기본 sed
명령어는 한 줄에 있는 첫 번째 일치하는 패턴만 변경합니다. 그러나 한 줄에서 모든 일치하는 패턴을 변경하고 싶다면 g
명령어을 사용해야 합니다.
sed 's/기존텍스트/새로운텍스트/g' 파일이름
ShellScript아래와 같이 마지막에 명령어 g를 사용하면 한 라인에서 ‘기존텍스트’가 여러 번 등장해도 전부 ‘새로운텍스트’로 바꿉니다. 아래는 example.txt 파일 내의 모든 Hello가 Hi로 변경된 것을 확인할 수 있습니다.
sed에서 사용할 수 있는 주요 옵션
sed
명령어는 매우 강력한 기능을 가지고 있으며, 다양한 옵션을 제공합니다. 여기서는 자주 사용되는 몇 가지 옵션을 소개하겠습니다.
-i
옵션 (in-place)
일반적으로 sed
는 원본 파일을 수정하지 않고, 변경된 결과를 출력합니다. 하지만 -i
옵션을 사용하면, 원본 파일 자체를 수정할 수 있습니다.
sed -i 's/기존텍스트/새로운텍스트/' 파일이름
ShellScript이 명령어는 원본 파일에서 ‘기존텍스트’를 ‘새로운텍스트’로 직접 대체합니다. 주의할 점은 -i
옵션을 사용할 경우 파일이 즉시 변경되므로, 백업을 미리 해두는 것이 좋습니다.
-n
옵션 (silent)
sed
명령어는 기본적으로 파일의 실행 결과를 모두 출력합니다. 그러나 -n
옵션을 사용하면, p
(print) 명령을 사용한 부분만 출력하도록 제어할 수 있습니다.
sed -n 's/기존텍스트/새로운텍스트/p' 파일이름
ShellScript-n 옵션만 사용하는 경우에는 변경한 내용을 출력하지 않습니다. 하지만, p 명령어와 함께 사용하면 ‘기존텍스트’를 ‘새로운텍스트’로 대체한 줄만 출력합니다.
-e
옵션 (multi-command)
sed
를 사용할 때 한 번에 여러 가지 작업을 실행하려면 -e
옵션을 사용하면 됩니다.
sed -e 's/텍스트1/텍스트2/' -e 's/텍스트3/텍스트4/' 파일이름
ShellScript이 명령어는 첫 번째로 ‘텍스트1’을 ‘텍스트2’로 바꾸고, 그 후 ‘텍스트3’을 ‘텍스트4’로 바꿉니다. 여러 명령어를 차례대로 실행해야 할 때 유용합니다.
실전 응용 예시
특정 라인만 수정하기
텍스트 파일에서 특정 라인만 수정하고 싶을 때는 라인 번호를 지정할 수 있습니다.
sed '2s/기존텍스트/새로운텍스트/' 파일이름
ShellScript이 명령어는 파일의 2번째 라인에서 ‘기존텍스트’를 ‘새로운텍스트’로 변경합니다. 라인 번호를 지정함으로써 대량의 파일에서 특정 부분만 쉽게 수정할 수 있습니다.
정규 표현식 사용하기
sed
는 정규 표현식을 지원하므로, 패턴을 보다 유연하게 설정할 수 있습니다. 예를 들어, 숫자만 찾아서 변경하고 싶다면 다음과 같이 사용할 수 있습니다.
sed 's/[0-9]/#/g' 파일이름
ShellScript이 명령어는 파일 내의 모든 숫자를 #
로 변경합니다. 정규 표현식은 sed
의 강력한 기능 중 하나로, 복잡한 패턴 매칭을 쉽게 수행할 수 있습니다.
파일 백업과 함께 수정하기
-i
옵션을 사용할 때, 원본 파일을 백업하면서 수정하려면 확장자를 지정해 백업 파일을 생성할 수 있습니다.
sed -i.bak 's/기존텍스트/새로운텍스트/' 파일이름
ShellScript이 명령어는 파일을 수정하기 전에 파일이름.bak
파일로 백업을 생성합니다. 중요한 파일을 수정할 때 실수로 데이터를 잃지 않도록 백업을 권장합니다. 다음과 같이 기존 파일 이름 뒤에 .bak가 붙어서 원본은 백업 파일로 저장됩니다.
sed 사용 시 주의사항
- 파일 수정 시 백업 권장:
-i
옵션으로 파일을 직접 수정할 때는 반드시 백업을 만들어 두세요.sed
명령어는 한 번 실행되면 되돌리기 어렵기 때문에 중요한 데이터를 다룰 때는 주의가 필요합니다. - 정규 표현식의 주의:
sed
에서 정규 표현식을 사용할 때는 패턴이 의도한 대로 동작하는지 항상 확인하세요. 특히, 특수 문자(예:.
나*
)는 정규 표현식에서 특별한 의미를 가지므로, 이들을 패턴에서 문자 그대로 인식하려면\
를 사용해야 합니다. - 다른 명령어와 함께 사용:
sed
는 단독으로 사용하기도 좋지만,grep
,awk
와 같은 다른 명령어와 결합하여 더욱 강력한 스크립트를 작성할 수 있습니다.
정리
리눅스 명령어 sed
는 리눅스에서 파일을 수정하거나 텍스트 데이터를 처리할 때 매우 강력한 도구입니다. 간단한 텍스트 치환부터 정규 표현식을 사용한 복잡한 변환까지 다양한 작업을 수행할 수 있습니다. 이번 포스팅에서 다룬 기본 사용법과 주요 옵션을 이해하고 나면, 실전에서 더 효율적으로 텍스트 처리를 할 수 있을 것입니다.
또한, 백업을 통해 데이터를 안전하게 보존하는 습관을 들이고, sed
명령어를 다른 유틸리티와 함께 사용하여 더욱 강력한 자동화 스크립트를 작성해보세요. sed
는 텍스트 파일을 다루는 거의 모든 리눅스 작업에서 중요한 도구가 될 것입니다.