업데이트:

하위 디렉토리에서 정규식 패턴을 재귀적으로 검색하는 라인 지향 검색 도구

ripgrep

특징

  • 코드 검색에 특화되고 기본적으로 재귀적 디렉토리 검색 사용
  • 자동 필터링 : 기본적으로 디렉토리를 검색할 때 아래 조건은 검색하지 않음
    • .gitignore .ignore .rgignore 명시되어 있는 파일은 기본적으로 검색하지 않음 → --no-ignore 로 회피
    • 숨겨진 파일 및 디렉토리 → --hidden 로 회피
    • 바이너리 파일 (ripgrep은 NUL바이트 있으면 바이너리로 간주) → --text, -a 로 회피
    • 심볼릭 링크 연결 → --follow, -L 로 연결

    전체 필터링을 회피하기 (단계별) → -u or -uu or -uuu (quivalent to ‘grep -r’)

  • 수동 필터링 : glob -g '*.toml'
  • UTF-8 이외의 텍스트 인코딩으로 파일 검색 지원
  • 비슷한 타입의 파일을 묶음 검색 지원 --type-list
  • Visual Studio Code 에 탑재 됨 : https://code.visualstudio.com/updates/v1_11#_text-search-improvements
  • 비슷한 다른 도구에 비해 가장 빠른 성능을 보임

비슷한 도구

설치

  • Releases 에서 다운받거나 Package 설치
# masos
$ brew install ripgrep

# ubuntu
$ apt install ripgrep

# chocolatey
$ choco install ripgrep

기본 사용

# 현재 하위 디렉토리에서 `bash` 란 단어를 찾음 
$ rg bash  

# /etc 디렉토리에서 `bash` 란 단어를 찾음 
$ rg bash /etc

# 파일/디렉토리 매치 검색
# -g, --glob <GLOB>:  Include or exclude files and directories for searching that match the given glob
$ rg bash -g '*.sh'

# -u, --unrestricted Reduce the level of "smart" searchin
# 스마트 검색 수준을 낮춤 
$ rg cmake -u

# rg -uuu' is roughly equivalent to 'grep -r'.
# 전체 파일 검색
$ rg cmake -uuu

타입 리스트 사용

# type-list 종류 확인
$ rg --type-list
...
cpp: *.[ChH], *.[ChH].in, *.[ch]pp, *.[ch]pp.in, *.[ch]xx, *.[ch]xx.in, *.cc, *.cc.in, *.hh, *.hh.in, *.inl
creole: *.creole
crystal: *.cr, Projectfile
cs: *.cs
csharp: *.cs
cshtml: *.cshtml
css: *.css, *.scss
csv: *.csv
cython: *.pxd, *.pxi, *.pyx
d: *.d
dart: *.dart
...
msbuild: *.csproj, *.fsproj, *.proj, *.props, *.targets, *.vcxproj
...
perl: *.PL, *.perl, *.pl, *.plh, *.plx, *.pm, *.t
php: *.php, *.php3, *.php4, *.php5, *.phtml
...
yaml: *.yaml, *.yml
...
# yaml type 파일에서 검색 
# -t, --type <TYPE>...
$ rg host -t yaml

# yaml type 파일 제외하고 검색 
# -T, --type-not <TYPE>...
$ rg host -T yaml

댓글남기기