← 아티클 목록

grep awk sed 차이 — 찾기·자르기·바꾸기로 구분하기

2028-11-06#linux#텍스트처리#

로그를 뒤지다 보면 grep, awk, sed가 다 같이 등장합니다. 셋 다 텍스트를 다루니 헷갈리지만, 역할은 분명히 나뉩니다. 줄을 찾고(grep), 열을 자르고(awk), 글자를 바꾼다(sed). 이 세 동사로 외우면 평생 안 헷갈립니다.

핵심은 세 가지 역할

grep은 패턴이 든 줄을 골라내는 도구입니다. 입력에서 조건에 맞는 행만 출력합니다. awk는 줄을 공백·구분자로 쪼개 특정 열(필드)을 꺼내거나 계산합니다. sed는 스트림 편집기로 치환·삭제 같은 변형을 합니다. 즉 grep은 검색, awk는 추출·집계, sed는 편집입니다.

구분grepawksed
주 역할줄 검색·필터열 추출·계산치환·삭제·편집
처리 단위행(line)필드(column)스트림
잘하는 일패턴 매칭통계·다중 조건정규식 치환
대표 옵션-i -v -r-F $1 NRs/// d
비유형광펜표 계산기찾아바꾸기

같은 작업, 셋으로 비교

access.log에서 작업해 보면 차이가 한눈에 보입니다.

로컬 터미널
grep "404" access.log              # 404가 든 줄만 찾기
awk '{print $1}' access.log        # 첫 번째 열(IP)만 자르기
sed 's/error/ERROR/g' access.log   # error를 ERROR로 바꾸기

조합하면 진짜 힘이 나옵니다. 404 요청을 일으킨 IP를 많은 순으로 보고 싶다면:

로컬 터미널
grep "404" access.log | awk '{print $1}' | sort | uniq -c | sort -rn
OUTPUT
     58 203.0.113.9
     12 198.51.100.4
      3 192.0.2.7

grep이 404 줄을 거르고, awk가 IP 열만 뽑고, 나머지가 집계합니다. 각자 한 가지만 잘하는 도구를 파이프(|)로 잇는 게 유닉스 방식입니다.

헷갈릴 때 판단 기준

  • "이 단어가 든 줄만 보고 싶다" → grep
  • "N번째 칸만 빼고 싶다 / 합·평균을 내고 싶다" → awk
  • "A를 B로 바꾸거나 특정 줄을 지우고 싶다" → sed

awk는 사실 작은 프로그래밍 언어라 조건·연산도 됩니다. awk '$9==500'처럼 9번째 필드가 500인 줄만 고를 수도 있어 grep+조건을 한 번에 처리합니다.

요점 정리

  • 세 동사로 기억: grep=찾기, awk=자르기, sed=바꾸기.
  • 처리 단위가 다르다 — grep은 행, awk는 필드, sed는 스트림.
  • 하나로 안 되면 파이프로 이어 붙인다.
  • awk는 조건·계산까지 되므로 단순 검색을 넘어설 때 강력하다.

grep·awk·sed를 실제 로그로 조합하며 익히는 실습은 리눅스 트랙에서 회원가입 없이 무료로 할 수 있습니다.