리눅스 sed 명령어 완벽 가이드 - 텍스트 치환부터 대량 파일 수정까지 한 번에 끝내기

개요

리눅스 환경에서 텍스트 파일 내용을 빠르고 정확하게 치환하고 편집할 수 있는 강력한 스트림 에디터 sed 명령어를 소개합니다. 기본 문자열 치환부터 특정 행 삭제, 백업과 동시에 파일을 직접 수정하는 인라인(-i) 옵션까지 실무 예제로 쉽게 배웁니다.

1. 실습 환경 준비 및 sed 기본 문자열 치환 (s 명령어)

sed 명령어 실습을 안전하게 진행할 전용 디렉터리를 생성하고 해당 위치로 이동하기 위해 mkdir -p ~/sed_practice && cd ~/sed_practice 명령어를 실행합니다.

mkdir -p ~/sed_practice && cd ~/sed_practice

문자열 치환 실습에 사용할 예제 텍스트를 구성하기 위해 echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt 명령어를 실행하여 파일에 내용을 작성합니다.

echo -e ‘apple is delicious\nbanana is yellow\napple is red’ > fruits.txt

sed 명령어는 텍스트 스트림을 가공하고 편집하는 스트림 에디터입니다.
s 치환 연산자를 사용하여 각 줄에서 처음 발견된 apple 문자열을 orange로 치환하여 화면에 출력합니다.
원본 파일인 fruits.txt의 내용은 변경되지 않고 표준 출력으로 결과만 표시됩니다.
⚙️ [주요 옵션]

-i : 출력 결과를 화면에 보여주는 대신 원본 파일을 직접 수정하여 저장합니다.
-e : 여러 개의 편집 스크립트 명령을 한 번에 연결하여 실행합니다.
-n : 패턴 스페이스의 자동 출력을 억제하고 명시적으로 지정한 줄만 출력합니다.
-E 또는 -r : 확장 정규식(ERE) 문법을 활성화하여 사용합니다.

sed ’s/apple/orange/’ fruits.txt

치환 표현식 끝에 g 플래그를 붙이면 한 줄에서 일치하는 모든 대상을 전역(global)으로 치환합니다.
각 행에 동일한 검색어가 여러 개 존재할 때 누락 없이 모두 변경하고자 할 때 사용합니다.

sed ’s/apple/orange/g’ fruits.txt

2. 특정 행 선택 출력 및 행 삭제 (d 및 -n 옵션)

행 선택 및 삭제 실습에 필요한 로그 데이터를 준비하기 위해 echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log 명령어를 실행하여 예제 파일을 생성합니다.

echo -e ‘Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK’ > server.log

-n 옵션과 p 명령을 조합하여 지정한 범위인 2행부터 3행까지만 화면에 출력합니다.
기본 자동 출력을 억제하고 원하는 특정 행만 선별하여 확인할 때 유용합니다.

sed -n ‘2,3p’ server.log

d 명령과 패턴 매칭을 사용하여 Warning 문자열이 포함된 행을 제외하고 나머지 내용만 화면에 출력합니다.
불필요한 로그나 특정 조건의 라인을 필터링하여 확인할 때 사용합니다.

sed ‘/Warning/d’ server.log

특정 행 번호를 지정하고 d 명령을 실행하여 2번째 행을 삭제한 결과를 화면에 출력합니다.
특정 줄 번호의 라인을 제거하고 파일 내용을 확인하고자 할 때 활용합니다.

sed ‘2d’ server.log

3. 원본 파일 직접 수정 및 자동 백업 (-i 옵션)

설정 파일 수정 실습을 위해 환경 변수 예제 데이터가 포함된 config.env 파일을 생성합니다.

echo -e ‘PORT=8080\nDEBUG=true\nTIMEOUT=30’ > config.env

-i.bak 옵션을 사용하여 원본 파일의 백업본인 config.env.bak을 생성함과 동시에, DEBUG=true 설정을 DEBUG=false로 즉시 치환하여 원본 파일에 저장합니다.
변경 전 상태를 안전하게 보존하면서 원본 파일을 직접 수정할 때 활용합니다.

sed -i.bak ’s/DEBUG=true/DEBUG=false/’ config.env

cat 명령어로 수정한 config.env 파일의 내용을 확인합니다.
DEBUG 값이 false로 정상 변경되어 파일에 반영된 것을 확인할 수 있습니다.

cat config.env

자동 생성된 백업 파일인 config.env.bak의 내용을 출력하여 확인합니다.
수정 전의 원본 내용인 DEBUG=true 상태가 그대로 보존되어 안전하게 백업되었음을 알 수 있습니다.

cat config.env.bak

4. 정규표현식과 구분자 변경을 활용한 고급 텍스트 치환

경로 치환 실습에 사용할 파일 경로 예제 데이터를 생성하기 위해 echo 명령어로 paths.txt 파일에 내용을 작성합니다.

echo -e ‘Old path: /usr/local/bin\nNew path: /usr/local/bin’ > paths.txt

기본 구분자인 슬래시(/) 대신 파이프(|) 기호를 치환 구분자로 사용하여 경로 내의 /usr/local/bin을 /usr/bin으로 안전하게 치환하여 출력합니다.
슬래시가 포함된 파일 경로나 URL을 다룰 때 이스케이프 문자(\) 없이 깔끔하게 표현식을 작성할 수 있습니다.

sed ’s|/usr/local/bin|/usr/bin|g’ paths.txt

정규표현식을 활용한 공백 제거 실습을 진행하기 위해 앞뒤 공백이 포함된 spaces.txt 예제 파일을 생성합니다.

echo -e ’   leading spaces\nno spaces\n   trailing removed   ’ > spaces.txt

줄의 시작을 의미하는 ^ 기호와 공백 및 탭 문자를 지정하는 [ \t]* 정규표현식을 매칭하여 각 행의 맨 앞에 위치한 공백을 모두 제거하고 출력합니다.
문서나 로그 데이터의 들여쓰기 공백을 일괄 정리하고자 할 때 유용하게 활용할 수 있습니다.

sed ’s/^[ \t]*//’ spaces.txt

지금까지 리눅스 sed 명령어의 기본 텍스트 치환부터 대량 파일 일괄 수정 방법까지 핵심 사용법을 정리해보았습니다.
반복적인 파일 편집 작업을 획기적으로 줄여주는 강력한 도구인 만큼, 필요할 때마다 손쉽게 활용해보시기 바랍니다.