로그를 뒤지다 보면 grep, awk, sed가 다 같이 등장합니다. 셋 다 텍스트를 다루니 헷갈리지만, 역할은 분명히 나뉩니다. 줄을 찾고(grep), 열을 자르고(awk), 글자를 바꾼다(sed). 이 세 동사로 외우면 평생 안 헷갈립니다.
핵심은 세 가지 역할
grep은 패턴이 든 줄을 골라내는 도구입니다. 입력에서 조건에 맞는 행만 출력합니다. awk는 줄을 공백·구분자로 쪼개 특정 열(필드)을 꺼내거나 계산합니다. sed는 스트림 편집기로 치환·삭제 같은 변형을 합니다. 즉 grep은 검색, awk는 추출·집계, sed는 편집입니다.
| 구분 | grep | awk | sed |
|---|---|---|---|
| 주 역할 | 줄 검색·필터 | 열 추출·계산 | 치환·삭제·편집 |
| 처리 단위 | 행(line) | 필드(column) | 스트림 |
| 잘하는 일 | 패턴 매칭 | 통계·다중 조건 | 정규식 치환 |
| 대표 옵션 | -i -v -r | -F $1 NR | s/// 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를 실제 로그로 조합하며 익히는 실습은 리눅스 트랙에서 회원가입 없이 무료로 할 수 있습니다.