ripgrep

ripgrep(コマンド rg)は多数のファイルを一括検索するためのツールです。昔からある grep というツールの強化版です。

Homebrewの入ったMacでのインストールは

brew install ripgrep

Windowsでのインストールは

winget install BurntSushi.ripgrep.MSVC

です。

昔からある grep と同様に使えます。例えば

rg ほげ *.txt

とすれば、*.txt から「ほげ」のある行をリストしてくれます。grep と違って、マッチ部分に色が着くので、見やすいと思います。

パイプで例えば rg ほげ *.txt | less のようにすれば grep と同じ出力になりますが色も着かなくなります。パイプなしで行番号を消したいなら -N、ファイル名を同じ行にしたいなら --no-heading のオプションを付けます(rg -N --no-heading ほげ *.txt)。これをデフォルトにしたければ、まず例えば export RIPGREP_CONFIG_PATH=/Users/okumura/.ripgreprc のように設定ファイルのパスを環境変数で設定してから、その設定ファイルに

-N
--no-heading

のようにオプションを行ごとに並べます。

よく使うオプション:

さて、ripgrep の特徴はデフォルトで再起検索することです。例えば

rg ほげ

だけで、カレントディレクトリ以下のすべてのファイルについて「ほげ」を検索します。ディレクトリ名を指定すれば、そのディレクトリ以下について検索します。

カレントディレクトリ以下の特定の種類のファイル、例えばPythonファイル(*.py または *.pyi)だけ検索するには

rg --type py ほげ

のようにします。種類の指定の仕方は rg --type-list と打つと表示されます。

ripgrep のもう一つの特徴は、前処理です。例として、PDFファイルのタイトルを検索することを考えます。Macのmdfindを活用するで書いたように、Macであれば kMDItemTitle にPDFのタイトルが入ることが多く、もし入らなかったらFinderコメント kMDItemFinderComment に書き込んでおくことにします。これらの情報を取り出すシェルスクリプトは次のようになります:

#!/bin/sh
exec mdls -name kMDItemFinderComment -name kMDItemTitle "$@"

これを例えば pdftitle という名前で保存して実行できるようにしておけば、

rg -i --type pdf --pre pdftitle hoge

でタイトルにhogeやHogeやHOGEが含まれるものを検索できます。