콘텐츠로 이동

ripgrep (rg) 명령어

ag의 사용성과 grep의 속도를 결합한 초고속 재귀 검색 도구입니다. 기본적으로 .gitignore 규칙을 준수합니다.

플랫폼명령어
macOS (Homebrew)brew install ripgrep
Ubuntu/Debiansudo apt install ripgrep
Arch Linuxsudo pacman -S ripgrep
Fedorasudo dnf install ripgrep
Windows (Scoop)scoop install ripgrep
Windows (Choco)choco install ripgrep
Cargo (Rust)cargo install ripgrep
확인rg --version
명령어설명
rg "pattern"현재 디렉토리에서 재귀적으로 검색
rg "pattern" path/특정 디렉토리에서 검색
rg "pattern" file.txt특정 파일에서 검색
rg -i "pattern"대소문자 무시 검색
rg -S "pattern"스마트 대소문자 (모두 소문자면 대소문자 무시)
rg -w "word"전체 단어만 일치
rg -c "pattern"파일별 일치 횟수
rg -l "pattern"일치하는 파일 목록만 표시
rg --files-without-match "pattern"일치하지 않는 파일 목록
rg -n "pattern"줄 번호 표시 (기본값)
rg -N "pattern"줄 번호 숨김
rg --column "pattern"일치 항목의 열 번호 표시
rg -F "literal.string"고정 문자열 검색 (정규식 없음)
명령어설명
rg "foo|bar"foo 또는 bar 일치
rg "^import"”import”로 시작하는 줄
rg ";\s*$"세미콜론으로 끝나는 줄
rg "\d{3}-\d{4}"전화번호 패턴 일치
rg "\bfunction\b"단어 경계 일치
rg "fn\s+\w+"함수 정의 일치
rg -P "(?<=@)\w+"PCRE2 후방탐색 (도메인 추출)
rg -P "\b\w{20,}\b"20자 이상의 단어
rg -U "struct \{[\s\S]*?\}"여러 줄 일치
rg -e "pat1" -e "pat2"다중 패턴 (OR 로직)
rg -f patterns.txt파일에서 패턴 읽기
명령어설명
rg -A 3 "pattern"일치 후 3줄 표시
rg -B 2 "pattern"일치 전 2줄 표시
rg -C 5 "pattern"컨텍스트 5줄 표시 (전후)
rg -o "pattern"일치한 텍스트만 출력
rg --json "pattern"JSON 형식으로 출력
rg --vimgrep "pattern"Vim 호환 형식으로 출력
rg --color never "pattern"색상 출력 비활성화
rg --color always "pattern" | less -R파이핑 시 색상 강제 적용
rg --heading "pattern"파일별로 결과 그룹화 (터미널 기본값)
rg --no-heading "pattern"그룹화 없이 한 줄 결과
rg --trim "pattern"결과에서 공백 제거
rg -m 5 "pattern"파일당 일치 5개로 제한
rg --max-count 1 "pattern"파일당 첫 번째 일치만
rg --stats "pattern"검색 통계 표시
rg --passthru "pattern"모든 줄 표시, 일치 항목 강조
명령어설명
rg -t py "pattern"Python 파일만 검색
rg -t js -t ts "pattern"JavaScript와 TypeScript 파일 검색
rg -T html "pattern"HTML 파일 제외
rg -g "*.md" "pattern"글로브 필터 — 마크다운 파일만
rg -g "!*.min.js" "pattern"글로브 제외 — 압축된 JS 제외
rg -g "src/**/*.ts" "pattern"디렉토리 경로가 있는 글로브
rg -g "!test/" "pattern"test 디렉토리 제외
rg --type-list알려진 모든 파일 유형 표시
rg --type-add 'web:*.{html,css,js}'사용자 정의 파일 유형 정의
명령어설명
rg --hidden "pattern"숨김 파일/디렉토리 포함
rg --no-ignore "pattern".gitignore 규칙 무시
rg --no-ignore-vcs "pattern"VCS 무시 파일만 건너뛰기
rg -u "pattern"제한 없음 (—no-ignore)
rg -uu "pattern"더 많은 제한 해제 (—no-ignore —hidden)
rg -uuu "pattern"최대 제한 해제 (+ 바이너리 파일)
rg --max-depth 2 "pattern"디렉토리 깊이 제한
rg -L "pattern"심볼릭 링크 따르기
rg --max-filesize 1M "pattern"1MB 이상 파일 건너뛰기
rg --sort path "pattern"파일 경로별로 결과 정렬
rg --sortr modified "pattern"수정 시간별 정렬 (최신 순)
rg --filesrg가 검색할 모든 파일 목록
rg --files -t rust모든 Rust 파일 목록
명령어설명
rg "old" -r "new"치환 미리보기 (표준 출력만)
rg "(\w+)@(\w+)" -r '$1 at $2'정규식 캡처 그룹 치환
rg "TODO" -r "DONE" --passthru치환된 전체 파일 표시
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g'파일에서 실제 치환 (sed 사용)
파일/변수설명
~/.ripgreprc기본 구성 파일
RIPGREP_CONFIG_PATH사용자 정의 구성 파일 경로
--no-config구성 파일 무시
--smart-case
--line-number
--heading
--max-columns=200
--max-columns-preview
--glob=!node_modules/
--glob=!.git/
--glob=!dist/
--glob=!vendor/
--colors=match:fg:yellow
--colors=match:style:bold
--colors=path:fg:green
# 컨텍스트와 함께 모든 TODO 표시
rg "TODO|FIXME|HACK|XXX" -t py -C 2

# 파일별 TODO 개수
rg -c "TODO" --sort path

코드베이스 전체에서 검색 및 치환

섹션 제목: “코드베이스 전체에서 검색 및 치환”
# 변경 사항 미리보기
rg "oldFunction" -r "newFunction" -t js

# 변경 사항 적용 (sed로 파이핑)
rg -l "oldFunction" -t js | xargs sed -i 's/oldFunction/newFunction/g'

사용되지 않는 코드와 미사용 임포트 찾기

섹션 제목: “사용되지 않는 코드와 미사용 임포트 찾기”
# 패턴을 포함하지 않는 파일 찾기
rg --files-without-match "Copyright" -t py

# 사용되지 않는 내보내기 찾기
rg "export " -t ts -l | while read f; do
  rg -l "$(basename $f .ts)" -g "!$f" || echo "Unused: $f"
done
# 압축된 로그 검색
rg -z "ERROR" /var/log/*.gz

# 오류에서 타임스탬프 추출
rg -o "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*ERROR.*" app.log

# 일별 오류 횟수
rg -o "^\d{4}-\d{2}-\d{2}" --no-filename error.log | sort | uniq -c
# fzf를 사용한 대화형 파일 선택
rg --files | fzf --preview 'rg --color=always "pattern" {}'

# 결과를 vim에 전달
rg --vimgrep "pattern" | vim -q /dev/stdin

# jq를 사용한 JSON 파이프라인
rg --json "pattern" | jq 'select(.type == "match") | .data.lines.text'
도구속도.gitignoreUnicode정규식
ripgrep가장 빠름✅ 지원✅ 완전 지원✅ Rust regex + PCRE2
grep -r느림❌ 미지원⚠️ 부분 지원✅ POSIX/확장
ag (Silver Searcher)빠름✅ 지원✅ 완전 지원✅ PCRE
ack보통❌ 미지원✅ 완전 지원✅ Perl
  • 가능하면 글로브 대신 파일 유형 필터 (-t, -T) 사용 — 더 빠르고 모든 확장자를 포함
  • .ripgreprc를 생성하여 스마트 대소문자, 헤딩, 디렉토리 제외를 기본값으로 설정
  • 프로젝트 루트에 .ignore 파일 사용 — git에 영향 없이 node_modules, dist, build 제외
  • 리터럴 문자열에 -F 사용 권장 — 정규식 메타문자가 포함된 경우 이스케이핑 방지
  • --stats 사용 — 대규모 코드베이스에서 검색 성능 이해
  • fzf 또는 xargs와 결합 — 대화형 선택 및 일괄 작업
  • 검색 전 --files 사용 — 실제 검색 전 어떤 파일이 검색되는지 확인
  • 여러 줄 모드 (-U) 는 신중히 사용 — 더 느리므로 가능하면 여러 검색 사용 권장
문제해결 방법
git 저장소에서 결과 누락파일이 .gitignore에 있을 수 있음 — rg -u 또는 --no-ignore 사용
바이너리 파일 건너뜀rg -uuu 또는 --text로 바이너리 파일 포함
정규식이 일치하지 않음PCRE2 엔진에 -P 시도하거나 리터럴 문자열에 -F 사용
\b로 결과 없음기본 엔진이 지원하지 않을 수 있음 — rg -P "\bword\b" 시도
파이프에서 색상 누락less나 다른 도구로 파이핑 시 --color always 사용
구성이 로드되지 않음RIPGREP_CONFIG_PATH 확인하거나 디버깅에 --no-config 사용
심볼릭 링크가 따라지지 않음-L 또는 --follow 플래그 추가
결과가 너무 많음-g '!pattern' 글로브 또는 -t type으로 범위 축소
검색이 너무 느림--max-filesize 사용, --max-depth로 깊이 줄이기, 또는 유형 필터링