# Ripgrep, grep, ag, Git grep, ucg, pt, sift보다 빠른 검색 기술 (2016년)

> Clean Markdown view of GeekNews topic #12111. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=12111](https://news.hada.io/topic?id=12111)
- GeekNews Markdown: [https://news.hada.io/topic/12111.md](https://news.hada.io/topic/12111.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2023-12-01T10:13:53+09:00
- Updated: 2023-12-01T10:13:53+09:00
- Original source: [blog.burntsushi.net](https://blog.burntsushi.net/ripgrep/)
- Points: 5
- Comments: 1

## Topic Body

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

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

### ripgrep 소개

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

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

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

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

### ripgrep의 구조

#### 배경
- `grep`과 `ack`의 후손 도구들 간의 차이점과 공통점을 설명.
- `ripgrep`은 `grep`의 대용량 파일 검색 능력과 `ack`의 "스마트" 검색 기본 설정을 결합함.

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

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

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

### 방법론

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

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

## Comments



### Comment 20996

- Author: neo
- Created: 2023-12-01T10:13:53+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=38471822) 
- 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이 왜 대체되거나 개선되지 않는지에 대한 의문을 제기하며, 이 주제가 다소 오래되었다고 평가함.
