5P by neo 12달전 | favorite | 댓글 1개

요약: 새로운 명령줄 검색 도구 ripgrep 소개

  • ripgrep은 The Silver Searcher의 사용성과 GNU grep의 성능을 결합한 새로운 명령줄 검색 도구임.
  • 리눅스, 맥, 윈도우용 바이너리를 제공하며 Rust로 작성됨.
  • 단일 파일 및 대규모 디렉토리 검색에서 성능과 정확성 면에서 뛰어남.
  • 유니코드 지원이 탁월하며, 메모리 맵을 사용하는 도구보다 일반적으로 더 빠름.

ripgrep 소개

장점

  • 다른 검색 도구보다 빠르며, .gitignore에 의해 무시되는 파일은 검색하지 않음.
  • 특정 파일 유형만 검색하거나 제외하는 기능 제공.
  • grep의 많은 기능을 지원하며, 유니코드를 항상 지원함.
  • PCRE2 정규 표현식 엔진을 선택적으로 사용할 수 있음.
  • 다양한 텍스트 인코딩과 압축된 파일 검색 지원.
  • 임의의 입력 전처리 필터 지원.

반대 의견

  • POSIX 표준을 준수하지 않으며, grep보다는 보편적이지 않음.
  • 다른 도구에 있는 특정 기능이나 버그가 ripgrep에는 없을 수 있음.
  • 성능의 특정 엣지 케이스에서 ripgrep이 다른 도구보다 느릴 수 있음.

설치

  • ripgrep의 바이너리 이름은 rg이며, 다양한 플랫폼에서 설치 가능.
  • Homebrew, Archlinux, Rust 프로그래머를 위한 설치 방법 제공.
  • 소스에서 직접 빌드하는 것도 가능.

빠른 투어

  • ripgrep의 명령줄 사용법은 다른 유사한 도구와 크게 다르지 않음.
  • 터미널 출력, 색상, 줄 번호 표시 등을 자동으로 지원.
  • 다양한 검색 옵션과 패턴을 사용하여 검색 가능.

ripgrep의 구조

배경

  • grepack의 후손 도구들 간의 차이점과 공통점을 설명.
  • ripgrepgrep의 대용량 파일 검색 능력과 ack의 "스마트" 검색 기본 설정을 결합함.

파일 검색 준비

  • 빠른 디렉토리 반복자 사용과 파일 경로 필터링이 중요.
  • .gitignore 파일의 규칙을 빠르게 적용하는 것이 성능에 영향을 미침.

검색

  • 빠른 정규 표현식 엔진과 리터럴 최적화가 중요함.
  • 전체 파일이 아닌 라인별로 검색하지 않고 큰 버퍼를 한 번에 검색함.

출력

  • 검색 결과를 메모리 버퍼에 쓰고, 이를 stdout으로 직렬화하여 출력함.

방법론

개요

  • 사용자가 해결하려는 문제에 초점을 맞추고, 공정한 벤치마크를 위해 노력함.
  • 다양한 도구를 벤치마크하고, 각 도구의 기본 동작 차이를 고려하여 비교함.

GN⁺의 의견

이 글에서 가장 중요한 것은 ripgrep이 기존의 검색 도구들과 비교하여 어떤 장점을 가지고 있는지를 상세히 설명하고 있다는 점입니다. 특히, 빠른 성능과 유니코드 지원, 다양한 파일 형식과 인코딩에 대한 지원 등이 사용자에게 매력적인 이유가 될 수 있습니다. 이 글이 흥미로운 이유는 새로운 도구가 기존 도구들과 어떻게 다른지, 그리고 그 차이가 실제 사용자에게 어떤 영향을 미칠 수 있는지를 이해하는 데 도움을 주기 때문입니다.

Hacker News 의견
  • ripgrep과 fzf의 조합은 매우 빠르며, 이를 활용하는 Powershell 함수 예시가 제공됨. 이 함수는 ripgrep으로 검색한 후 fzf를 사용하여 퍼지 검색을 하고, bat를 통해 결과의 컨텍스트를 보여줌. 이 방법은 여러 저장소 프로젝트에서 특정 내용의 위치를 빠르게 찾는 데 유용함.
  • Emacs의 project.el 패키지와 dumb-jump 패키지를 사용하여 ripgrep을 활용하는 방법이 소개됨. dumb-jump는 특정 프로젝트 디렉토리 내에서 현재 파일 유형에 대한 검색을 자동으로 제한하며, ag라는 또 다른 빠른 도구도 지원함.
  • ripgrep이 Node.js 래퍼를 통해 VS Code 검색 기능을 제공한다는 사실이 흥미로움.
  • ripgrep 사용자는 grep 대비 사용의 용이성과 속도 향상을 주된 이유로 꼽으며, 특히 gitignore 규칙을 자동으로 적용하는 기능을 유용하게 사용함.
  • ripgrep, ag와 같은 병렬화된 grep 대체품들이 grep보다 훨씬 빠르기 때문에 속도 차이가 큰 기준이 되지 않으며, 다른 방식으로 평가해야 함을 언급함.
  • ripgrep의 초기 발표가 2016년이었음을 지적하며, 제목에 연도 표시가 필요함을 제안함.
  • qgrep은 인덱스를 사용하여 빠른 속도를 제공하지만, UTF8 멀티라인 매치가 필요할 때는 ripgrep이 느려질 수 있음을 언급함.
  • Emacs 내에서 ripgrep을 사용하는 Consult 패키지를 통해 프로젝트 전체 편집을 수행하는 편리한 워크플로우를 공유함.
  • ripgrep-all 버전은 PDF와 doc 파일과 같은 다른 문서 유형에서도 작동한다는 정보를 제공함.
  • grep이 왜 대체되거나 개선되지 않는지에 대한 의문을 제기하며, 이 주제가 다소 오래되었다고 평가함.