macOS에서 대용량 로그 파일 검색할 때 쓰는 grep/ripgrep 명령어
언제 사용하나
수백 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.*.gz6. 결과 저장
rg -n "ERROR" logs/ > /tmp/errors.txt
wc -l /tmp/errors.txt주의사항
- macOS 기본
grep은 BSD 계열이라-P(PCRE)를 지원하지 않는다.brew install grep후ggrep을 쓰거나rg를 쓴다. - 매칭이 너무 많으면 터미널이 멈춘 것처럼 보인다.
| head -50이나 파일 리다이렉트를 습관적으로 붙인다. - 운영 서버에서 검색할 때는
rg병렬 검색이 디스크 I/O를 크게 쓴다. 트래픽이 적은 시간대에 실행한다.
활용 팁
- 자주 쓰는 조합은
~/.zshrc에 별칭으로 둔다.alias rge='rg -n --no-heading'
댓글 0개
아직 댓글이 없습니다.
