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
のようにオプションを行ごとに並べます。
よく使うオプション:
-i 大文字・小文字を区別しないさて、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が含まれるものを検索できます。