Linux 텍스트 에디터의 마법

발행: (2025년 12월 16일 오전 07:46 GMT+9)
14 min read
원문: Dev.to

I’m happy to translate the article for you, but I’ll need the full text of the post (the part you want translated) in order to do so. Please paste the article’s content here, and I’ll provide a Korean translation while keeping the source line and all formatting exactly as you requested.

문제: 원격 서버에서 파일 편집

서버에 SSH로 접속합니다. 설정 파일을 편집해야 하는데 GUI도 없고 VS Code도 없습니다. 오직 터미널만 있죠.

vi로 파일을 열었는데… 아무것도 작동하지 않습니다. 빠져나올 수도, 저장할 수도 없습니다. 당황감이 몰려옵니다.

또는 100개의 파일에서 특정 단어를 교체해야 한다면? 하나씩 열어야 할까요? 그럼 몇 시간이 걸릴 겁니다.

이 때문에 vi/vimsed가 존재합니다:

  • vi/vim – 대화형 편집.
  • sed – 자동화된 텍스트 변환.

vi/vim 이해

  • vi (visual editor)는 모든 Linux 시스템에 있습니다.
  • vim (vi improved)는 더 많은 기능을 가진 향상된 버전입니다.

두 가지 모드: 핵심 개념

모드설명
Command Mode (default)탐색, 삭제, 복사, 검색
Insert Mode일반 텍스트 입력

vi/vim 시작

vi filename      # Opens file in vi
vim filename     # Opens file in vim

당신은 Command Mode에서 시작합니다.

삽입 모드: 텍스트 추가

명령 모드에서 다음을 누르세요:

KeyAction
i커서 위치에 삽입
a커서 뒤에 삽입 (공백 추가)
o새로운 줄을 아래에 열고 삽입 모드 진입
O새로운 줄을 에 열고 삽입 모드 진입 (대문자 O)

ESC를 눌러 명령 모드로 돌아갑니다.

Command Mode: Navigation and Editing

기본 이동

h   # 왼쪽
j   # 아래
k   # 위
l   # 오른쪽

(또는 화살표 키 사용.)

삭제

x      # 커서 아래 문자 삭제
dd     # 전체 라인 삭제
dw     # 단어 삭제
D      # 커서부터 라인 끝까지 삭제

실행 취소 / 다시 실행

u        # 마지막 변경 실행 취소
Ctrl+r   # 다시 실행

교체

r   # 단일 문자 교체 (새 문자 입력)
R   # 교체 모드 – 여러 문자를 교체하려면 계속 입력

참고: r은 여러 문자를 교체할 때 신뢰성이 떨어집니다. R이나 검색·치환 명령을 사용하세요.

검색

/keyword   # 앞으로 검색
?keyword   # 뒤로 검색
n          # 다음 일치 항목
N          # 이전 일치 항목

복사와 붙여넣기 (Yank / Put)

yy        # 현재 라인 복사 (Yank)
p         # 커서 아래에 붙여넣기 (Put)
P         # 커서 위에 붙여넣기 (대문자 P)

3yy       # 3줄 복사

저장 및 종료

:w          # 쓰기 (저장)
:q          # 종료 (변경 사항이 없을 때)
:wq         # 쓰고 종료
:wq!        # 강제로 쓰고 종료
:q!         # 저장하지 않고 종료 (변경 사항 버림)

Shift+ZZ    # :wq와 동일

중요: 이 명령들은 명령 모드에서만 입력하세요 (ESC를 먼저 눌러야 합니다).

vim에서 검색 및 교체

명령 모드에서:

:%s/old/new/g      " 파일 전체에서 모든 항목 교체
:%s/old/new/gc     " 모두 교체, 확인 요청
:s/old/new/g       " 현재 행에서만 교체

:%s/old/new/g의 구성:

  • : – 명령줄 모드 진입.
  • % – 파일 전체에 적용.
  • s – 치환.
  • /old/new/ – “old”를 “new”로 교체.
  • g – 전역(각 행의 모든 항목).

특정 행에서 교체

:1,10s/old/new/g   " 1‑10행
:5s/old/new/g      " 5행만

예시: 변수 이름 변경

# "userName"을 파일 전체에서 "userId"로 교체
:%s/userName/userId/g

vi vs. vim

Featurevivim
AvailabilityUnix‑계열 시스템에서 항상 존재설치가 필요할 수 있음
Syntax highlighting없음있음
Multiple undo levels제한적있음
Split windows없음있음
Plugins없음있음
Enhanced search/replace기본고급

인터랙티브 vim 튜토리얼을 보려면 openvim.com 를 확인하세요.

vim 설치 (이미 설치되어 있지 않은 경우)

# Ubuntu/Debian
sudo apt install vim

# CentOS/RHEL
sudo yum install vim

Source:

sed 명령어: 스트림 편집기

sed (스트림 편집기)는 텍스트를 비대화식으로 변환합니다. 스크립트와 대량 작업에 적합합니다.

기본 구문

sed 'command' filename

찾기 및 바꾸기

# 각 행에서 첫 번째 발생만 교체
sed 's/Name/NewName/' filename

# 모든 발생을 교체 (전역)
sed 's/Name/NewName/g' filename

# 교체하고 파일에 저장 (제자리 수정)
sed -i 's/Name/NewName/g' filename

중요:

  • -i 옵션이 없으면 출력은 stdout으로 가며 원본 파일은 변경되지 않습니다.
  • -i 옵션을 사용하면 파일이 직접 수정됩니다.
  • /g 플래그는 각 행에서 교체를 전역으로 수행합니다.

텍스트 삭제

# 특정 단어 삭제
sed 's/Name//g' filename

# 키워드를 포함한 행 삭제
sed '/keyword/d' filename

# 빈 행 삭제
sed '/^$/d' filename

# 처음 두 행 삭제
sed '1,2d' filename

# 5‑10행 삭제
sed '5,10d' filename

특수 문자 교체

# 탭을 공백으로 교체
sed -i 's/\t/ /g' filename

# 공백을 탭으로 교체
sed -i 's/ /\t/g' filename

TL;DR

  • vi/vim – 대화형 편집, 빠른 수정, 그리고 강력한 키보드 기반 워크플로우 학습에 사용합니다.
  • sed – 한 줄 명령, 스크립트, 그리고 다수 파일에 대한 대량 텍스트 변환에 사용합니다.

두 가지를 모두 마스터하면 원격 Linux 시스템을 전문가처럼 편집할 수 있습니다.

화면 모드

전체 화면 모드 종료

특정 라인 표시

# 12‑18 라인 표시
sed -n '12,18p' filename

# 12‑18 라인을 제외하고 표시
sed '12,18d' filename

# 처음 10 라인 표시 (head와 같이)
sed -n '1,10p' filename

빈 줄 추가

# Add a blank line after each line
sed G filename

# Double‑space the file (output to a new file)
sed G filename > newfile.txt

고급 치환: 줄 건너뛰기

# 모든 줄에서 1행을 제외하고 치환
sed '1!s/word/newword/g' filename

# 10‑20행에서만 치환
sed '10,20s/word/newword/g' filename

실제 시나리오

시나리오 1: 구성 업데이트

# Check current value
grep "port" /etc/app/config.yml

# Replace with sed
sed -i 's/port: 8080/port: 3000/g' /etc/app/config.yml

# Verify change
grep "port" /etc/app/config.yml

시나리오 2: 로그 파일 정리

# Remove empty lines
sed -i '/^$/d' app.log

# Remove DEBUG lines
sed -i '/DEBUG/d' app.log

# Or chain them
sed -i '/^$/d; /DEBUG/d' app.log

시나리오 3: 대량 파일 업데이트

# Find all .js files and replace
find . -name "*.js" -exec sed -i 's/api.old.com/api.new.com/g' {} \;

시나리오 4: 서버에서 구성 편집

ssh user@server
sudo vim /etc/nginx/nginx.conf

# Press i to enter insert mode
# Make changes
# Press ESC
# Type :wq to save and exit

시나리오 5: 주석 제거

sed -i '/^#/d' script.sh

vi/vim과 sed 결합

  • vi/vim을(를) 대화형 편집에 사용합니다.
  • sed를(을) 자동화된 배치 변경에 사용합니다.

vim을 사용할 때

  • 단일 파일을 편집할 때
  • 편집 중에 컨텍스트를 확인해야 할 때
  • 여러 가지 서로 다른 변경을 할 때
  • 대화형 작업이 필요할 때

sed를 사용할 때

  • 다수의 파일을 배치 처리할 때
  • 스크립트화된 변경이 필요할 때
  • 간단한 찾기/바꾸기 작업을 할 때
  • 자동화된 배포 과정에 사용할 때

예시 워크플로

# 1. 변경이 필요한 항목 확인
grep "old_value" *.conf

# 2. sed 명령 테스트 (‑i 없이)
sed 's/old_value/new_value/g' config.conf

# 3. 모든 파일에 적용
sed -i 's/old_value/new_value/g' *.conf

# 4. 필요하면 vim으로 한 파일 검증
vim config.conf

Quick Reference

vim Commands

CommandAction
i커서 위치에서 삽입 모드
a커서 뒤에 삽입
o아래에 새 줄 열기
ESC명령 모드로 돌아가기
x문자 삭제
dd줄 삭제
u실행 취소
r문자 교체
/keyword검색
yyYank(복사) 줄
p붙여넣기
:w저장
:q종료
:wq저장하고 종료
:q!저장 없이 종료
Shift+ZZ저장하고 종료
:%s/old/new/g모든 발생을 교체

sed Commands

CommandAction
sed 's/old/new/g' file모든 발생을 교체
sed -i 's/old/new/g' file제자리 교체
sed '/keyword/d' filekeyword가 포함된 줄 삭제
sed '/^$/d' file빈 줄 삭제
sed '1,5d' file1‑5줄 삭제
sed -n '10,20p' file10‑20줄 표시
sed 's/\t/ /g' file탭을 공백으로 변환
sed G file두 줄 간격(각 줄 뒤에 빈 줄 추가)

일반적인 실수

실수 #1 – 삽입 모드에서 나오는 것을 잊음
명령을 입력하고 있지만 텍스트로 표시됩니다. 먼저 ESC 키를 누르세요.

실수 #2 – 테스트 없이 sed 사용

# Wrong – modifies file immediately
sed -i 's/old/new/g' important_file.txt

# Right – test first
sed 's/old/new/g' important_file.txt   # check output
# Then add -i if it looks good

실수 #3 – 특수 문자를 이스케이프하지 않음

# Wrong
sed 's/http://old.com/http://new.com/g' file

# Right – escape slashes or use another delimiter
sed 's|http://old.com|http://new.com|g' file

실수 #4 – /g 플래그를 빼먹음

# Replaces only the first occurrence per line
sed 's/old/new/' file

# Replaces all occurrences
sed 's/old/new/g' file

효율성을 위한 팁

팁 1 – sed -i 사용 전에 백업 만들기

# Create a .bak backup
sed -i.bak 's/old/new/g' file.txt

팁 2 – 학습은 vim, 자동화는 sed 사용
vim에서 인터랙티브하게 편집을 배우고; 패턴을 알게 되면 sed로 자동화하세요.

팁 3 – sed 명령 연결하기

# Multiple operations at once
sed -i '/^$/d; /DEBUG/d; s/old/new/g' file.txt

팁 4 – Vim 줄 번호

:set number        " Show line numbers
:set nonumber      " Hide line numbers

실용 예제

예제 1 – 데이터베이스 연결 업데이트

# Old: localhost
# New: db.server.com
sed -i 's/localhost/db.server.com/g' config.php

예제 2 – 모든 포트 변경

# Update port 8080 to 3000 in all *.conf files
find /etc/app -name "*.conf" -exec sed -i 's/:8080/:3000/g' {} \;

예제 3 – 트레일링 공백 제거

sed -i 's/[[:space:]]*$//' file.txt

예제 4 – 각 행 앞에 텍스트 추가

# Prefix each line with "# "
sed -i 's/^/# /' file.txt

라인 주석 처리

sed 's/^/# /' file.txt

Example 5: 특정 섹션에서 교체

# 10‑50줄에서만 교체
sed '10,50s/old/new/g' file.txt

핵심 요점

  • Vim은 두 가지 모드 – 명령 모드(기본)와 삽입 모드(i).
  • ESC는 명령 모드로 돌아갑니다 – 항상 기억하세요.
  • :wq는 저장하고 종료합니다 – 또는 Shift+ZZ를 사용하세요.
  • sed는 자동화를 위한 도구입니다-i 옵션을 사용해 파일을 제자리에서 수정하세요.
  • 먼저 -i 없이 sed를 테스트하세요 – 적용하기 전에 변경 사항을 미리 확인합니다.
  • 전역 교체를 위해 /g를 사용하세요 – 이 옵션이 없으면 한 줄에서 첫 번째 일치만 교체됩니다.
  • 대화형 편집은 Vim, 배치 처리는 sed – 작업에 맞는 도구를 선택하세요.
  • openvim.com에서 연습하세요 – 인터랙티브 Vim 튜토리얼입니다.

Vim과 sed는 구식이 아니라 서버 관리, 자동화, 효율적인 텍스트 편집을 위한 필수 도구입니다. 이를 마스터하면 GUI를 클릭하는 사람보다 훨씬 빠르게 파일을 편집할 수 있습니다.

가장 유용한 Vim 또는 sed 명령은 무엇인가요? 댓글에 여러분이 즐겨 사용하는 편집 팁을 공유해주세요.

Back to Blog

관련 글

더 보기 »

12일간의 Shell

기사 URL: https://12days.cmdchallenge.com 댓글 URL: https://news.ycombinator.com/item?id=46190577 점수: 31 댓글: 8…