stamper

macOS에서 대용량 로그 파일 검색할 때 쓰는 grep/ripgrep 명령어

stamper2026. 8. 10.조회 11추천 0

언제 사용하나

수백 MB~수 GB짜리 로그에서 특정 에러나 요청 ID를 찾아야 할 때. macOS 기본 grep(BSD)은 GNU grep과 옵션이 조금 다르다.

1. 먼저 파일 크기와 형식 확인

ls -lh app.log
file app.log

수 GB라면 에디터로 열지 말고 아래 명령으로 바로 검색한다.

2. 기본 검색 (grep)

# 단순 문자열 검색 + 줄 번호
grep -n "ERROR" app.log

# 대소문자 무시
grep -in "timeout" app.log

# 정규식 대신 고정 문자열로 검색 (훨씬 빠름)
grep -Fn "trace-id-8f2c" app.log

# 에러 앞뒤 5줄까지 같이 보기
grep -n -C 5 "NullPointerException" app.log

-F는 패턴을 정규식이 아닌 그냥 문자열로 처리해 대용량에서 눈에 띄게 빠르다.

3. ripgrep으로 디렉터리 전체 검색

brew install ripgrep

# logs/ 아래 전부 검색 (기본으로 재귀 + 병렬)
rg "ERROR" logs/

# 확장자 제한
rg -g '*.log' "connection refused" logs/

# 압축 파일까지 같이 검색
rg -z "OutOfMemory" logs/

# 매칭된 파일 이름만
rg -l "ERROR" logs/

rg는 기본적으로 .gitignore를 존중한다. 무시된 로그까지 보려면 -u(또는 -uu)를 붙인다.

rg -uu "ERROR" logs/

4. 시간대로 범위를 좁히기

# 특정 시각대만 뽑아서 다시 검색
grep "2026-08-06T14:" app.log | grep -F "ERROR"

# 마지막 20만 줄에서만 검색
tail -n 200000 app.log | grep -n "ERROR"

5. 회전된 로그(.gz)까지 한 번에

# gzip 로그 검색
zgrep -n "ERROR" app.log.1.gz

# 여러 개 묶어서
zgrep -Hn "ERROR" app.log.*.gz

6. 결과 저장

rg -n "ERROR" logs/ > /tmp/errors.txt
wc -l /tmp/errors.txt

주의사항

  • macOS 기본 grep은 BSD 계열이라 -P(PCRE)를 지원하지 않는다. brew install grepggrep을 쓰거나 rg를 쓴다.
  • 매칭이 너무 많으면 터미널이 멈춘 것처럼 보인다. | head -50 이나 파일 리다이렉트를 습관적으로 붙인다.
  • 운영 서버에서 검색할 때는 rg 병렬 검색이 디스크 I/O를 크게 쓴다. 트래픽이 적은 시간대에 실행한다.

활용 팁

  • 자주 쓰는 조합은 ~/.zshrc에 별칭으로 둔다.
    alias rge='rg -n --no-heading'

댓글 0

아직 댓글이 없습니다.