안녕하세요.
루디쿡 아이티입니다~!!
이번에 소개드릴 리눅스의 핵심 기술은
바로 명령어 결과 실시간 편집 (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를 전하는 루디쿡아이티였습니다!!
감사합니다~!!

'인프라 (Infrastructure) > 운영체제 (OS)' 카테고리의 다른 글
| 리눅스 alias 명령어 사용법 및 실제 예제 (자주 사용하는 명령어 등록) (0) | 2025.09.06 |
|---|---|
| 리눅스 chmod 명령어 사용법 및 실제 활용 예시 (파일 권한 수정 변경) (0) | 2025.09.06 |
| 리눅스 파이프라인 (|) 명령어 조합 사용법 및 실제 예제 (0) | 2025.09.05 |
| 리눅스 cat 명령어 사용법 및 실제 예제 활용(파일 내용 보기 / 합치기) (0) | 2025.09.05 |
| 리눅스 ls 명령어 사용법 및 실제 활용 예시 (0) | 2025.09.05 |