/엔지니어/Linux / Shell/awk · sed 실전 — 로그 파싱과 텍스트 변환
Linux / Shell중급UbuntuDebianCentOSmacOSawksed로그분석

awk · sed 실전 — 로그 파싱과 텍스트 변환

로그 분석, CSV 변환, 설정 파일 패치 등 현업에서 자주 쓰는 awk·sed 패턴을 한 곳에 정리합니다.

awk 기본

Bash
# 구분자로 필드 출력 ($1=첫번째 필드)
awk '{print $1, $3}' access.log

# 구분자 지정 (콜론)
awk -F':' '{print $1}' /etc/passwd

# 조건 필터 (5번째 필드가 200인 행)
awk '$5 == 200 {print $0}' access.log

# 합계 계산
awk '{sum += $NF} END {print "Total:", sum}' numbers.txt

awk 실전 로그 분석

Bash
# Nginx access.log에서 상태코드별 집계
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# IP별 요청 수 Top 10
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# 응답 크기 합계 (바이트)
awk '{sum += $10} END {printf "Total: %.2f MB\n", sum/1024/1024}' access.log

# 4xx, 5xx 에러만 출력
awk '$9 ~ /^[45]/' /var/log/nginx/access.log

sed 기본

Bash
# 문자열 치환 (첫 번째 일치)
sed 's/old/new/' file.txt

# 전체 치환 (g 플래그)
sed 's/old/new/g' file.txt

# 대소문자 무시 치환
sed 's/old/new/gi' file.txt

# 파일 직접 수정 (-i)
sed -i 's/localhost/127.0.0.1/g' config.conf

# 특정 줄 삭제 (3번째 줄)
sed '3d' file.txt

# 빈 줄 제거
sed '/^$/d' file.txt

# 주석 줄 제거
sed '/^#/d' config.conf

sed 실전 설정 파일 패치

Bash
# 포트 번호 변경
sed -i 's/^Port 22/Port 2222/' /etc/ssh/sshd_config

# 특정 줄 다음에 새 줄 삽입
sed -i '/^SELINUX=enforcing/a SELINUXTYPE=targeted' /etc/selinux/config

# 여러 파일 일괄 치환
find . -name "*.conf" -exec sed -i 's/old_domain/new_domain/g' {} \;

# 구분자를 / 대신 | 사용 (경로 포함 시 편리)
sed 's|/old/path|/new/path|g' deploy.sh

조합 패턴

Bash
# 특정 범위 줄만 처리 (10~20번째 줄)
sed -n '10,20p' large_file.log

# 패턴 사이 줄 출력
sed -n '/START/,/END/p' file.txt

# awk로 파싱 후 sed로 포맷 정리
awk -F',' '{print $1,$3}' data.csv | sed 's/ /\t/g'
#awk#sed#로그분석#텍스트처리#linux
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서GNU/Linux man 페이지

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.