본문 바로가기
인프라 (Infrastructure)/운영체제 (OS)

리눅스 sed 명령어 사용법 및 실제 예제 활용(텍스트 치환 / 바꾸기)

by IT 성능 전문 블로그 2025. 9. 6.
반응형

안녕하세요.

 

루디쿡 아이티입니다~!!

이번에 소개드릴 리눅스의 핵심 기술은

바로 명령어 결과 실시간 편집 (sed) 입니다!!


sed 란?

sed는 'Stream Editor'의 약자로,

이름 그대로 흐르는(Stream) 데이터를 편집(Editor)하는 강력한 도구입니다.

파이프라인(|)을 통해 데이터가 물처럼 흘러들어오면,

sed는 그 중간에 서서 특정 규칙에 따라

글자를 바꾸거나 삭제하는 '텍스트 가공 로봇'과 같습니다. 🤖

 

1974년, 벨 연구소의 리 E. 맥마흔(Lee E. McMahon)이 개발한 sed는

"하나의 도구는 하나의 작업만 잘해야 한다"는 유닉스 철학의 정수를 보여줍니다.

grep이 텍스트를 '찾는' 전문가라면,

sed는 텍스트를 '찾아서 바꾸는' 최고의 전문가입니다.

 

이 sed를 사용하면 파일의 원본은 전혀 건드리지 않고,

화면에 출력되는 내용만 실시간으로 바꿔치기할 수 있습니다.

로그 파일을 분석하거나,

명령어 결과를 보고서 형식에 맞게 바꾸는 등 활용도가 무궁무진합니다.


sed 치환 문법 (s/.../.../) 완전 정복

sed의 기능 중 가장 많이 쓰이는 것은 단연 치환(substitute) 기능입니다.

s 명령어로 표현하며, 그 구조는 아래와 같습니다.

 

's/찾을패턴/바꿀내용/플래그'

요소 설명
s 치환(substitute) 작업을 하겠다는 명령어입니다.
/ 각 영역(패턴, 내용, 플래그)을 나누는 구분자(delimiter)입니다.
찾을패턴 바꾸고 싶은 원본 문자열 또는 정규표현식입니다.
바꿀내용 새로 집어넣을 문자열입니다.
플래그 치환 작업의 방식을 지정하는 옵션입니다. (아래 예시 참고)
 

가장 중요한 플래그 g

플래그 이름 설명
(없음) (기본값)
한 줄에서 찾을패턴과 일치하는 첫 번째 대상만 치환합니다.
g global
한 줄에서 찾을패턴과 일치하는 모든 대상을 치환합니다.

sed 실제 예시

sed의 다양한 활용법을 알아보기 위해, 아래와 같은 내용을 담은 test.txt 파일 하나를 사용하겠습니다.

test.txt 파일의 원본 내용

# System Log & Config
[ERROR] Connection failed. This ERROR is critical.
path=/home/user/app/data
user=root

예시 1: 첫 번째 단어만 찾아 바꾸기

먼저 test.txt 파일에서 각 줄의 첫 번째 'ERROR'만 'WARNING'으로 바꿔보겠습니다.

g 플래그를 쓰지 않았을 때의 동작을 확인하기 좋습니다.

구분 내용
목표 test.txt 내용 중 각 줄의 첫 번째 'ERROR'만 'WARNING'으로 바꾸기
전체 명령어 cat test.txt | sed 's/ERROR/WARNING/'
명령어 분석 's/ERROR/WARNING/'
g 플래그가 없으므로, 한 줄에 'ERROR'가 여러 개 있어도 첫 번째 것만 바꿉니다.
실행 결과 ✨ 아래 확인!!
# System Log & Config
[WARNING] Connection failed.
This ERROR is critical.
path=/home/user/app/data
user=root
 

결과 분석: 두 번째 줄을 보면 첫 [ERROR]는 [WARNING]으로 바뀌었지만,

뒤에 있던 This ERROR is critical.의 ERROR는

그대로 남아있는 것을 확인할 수 있습니다.


예시 2: 해당하는 모든 단어 찾아 바꾸기 (g 플래그)

이번에는 g 플래그를 붙여서 test.txt 안에 있는 모든 'ERROR'를 'WARNING'으로 바꿔보겠습니다.

구분 내용
목표 test.txt 내용 중 모든 'ERROR'를 'WARNING'으로 바꾸기
전체 명령어 cat test.txt | sed 's/ERROR/WARNING/g'
명령어 분석 's/ERROR/WARNING/g'
g(global) 플래그가 있으므로, 한 줄에 'ERROR'가 몇 개든 전부 찾아서 바꿉니다.
실행 결과 ✨ 아래 확인!!
# System Log & Config
[WARNING] Connection failed. 
This WARNING is critical.
path=/home/user/app/data
user=root

결과 분석: g 플래그의 힘으로 두 번째 줄에 있던

두 개의 'ERROR'가 모두 'WARNING'으로 완벽하게 변경되었습니다.


예시 3: 경로('/')가 포함된 내용 바꾸기 (구분자 변경)

test.txt의 경로 /home/user/app을 /var/www/html로 변경해 보겠습니다.

경로에는 슬래시(/)가 포함되어 있어 sed의 기본 구분자와 충돌합니다.

이럴 땐 구분자를 다른 기호(여기서는 #)로 바꿔서 해결합니다.

구분 내용
목표 test.txt의 경로 /home/user/app을 /var/www/html로 바꾸기
전체 명령어 cat test.txt | sed 's#/home/user/app#/var/www/html#g'
명령어 분석 's#찾을내용#바꿀내용#g'
기본 구분자 / 대신 #를 구분자로 사용하여, 경로에 있는 /와 충돌하지 않도록 했습니다.
실행 결과 ✨ 아래 확인!!
# System Log & Config
[ERROR] Connection failed.
This ERROR is critical.
path=/var/www/html/data
user=root

결과 분석: 구분자를 #로 바꾼 덕분에,

복잡한 경로도 아무런 문제 없이 깔끔하게 치환되었습니다.


이것으로 파이프라인으로 흐르는 텍스트를 실시간으로 편집하는 sed에 대해 알아보았습니다.

셸 스크립팅과 데이터 가공의 세계에 오신 것을 환영합니다!

 

앞으로도 좋은 글로 찾아뵙도록 하겠습니다.

 

 

IT 성능 전문가, IT를 전하는 루디쿡아이티였습니다!!

 

 

감사합니다~!!

 

 

 

 

반응형