テキストを検索したい(ripgrep)

$ rg 検索パターン

rgコマンドで、テキストを検索できます。 Rust製の高速grepです。

デフォルトの検索パターンはgrep -Eと同じ拡張正規表現として扱われます。 検索結果の該当箇所がデフォルトで色付けされます。 .gitignoreに書かれているファイルは無視してくれます。

インストールしたい(ripgrep)

$ brew install ripgrep
$ rg --version
ripgrep 15.2.0

rgはHomebrewでインストールできます。 フォーミュラ名はripgrepです。

ヒント

Rust製なのでバイナリーをインストールするだけで使えます。 管理者権限のないサーバーにも導入しておくと便利です。

大文字/小文字を区別せずに探したい(-i / --ignore-case)

$ rg --ignore-case 検索パターン
$ rg -i 検索パターン

-iオプションで、大文字/小文字を区別せずに検索できます。 rgはデフォルトでスマートケース(パターンに大文字を含む場合のみ区別)なので、 grepより意識する機会は少なめです。

マッチしなかった行を探したい(-v / --invert-match)

$ rg --invert-match 検索パターン
$ rg -v 検索パターン

-vオプションで、検索パターンにマッチしなかった行だけを書きだせます。

行番号を表示したい(-n / --line-number)

$ rg --line-number 検索パターン
$ rg -n 検索パターン

rgはgrepと異なり、標準出力がターミナルに接続されている場合、デフォルトで行番号が表示されます。 パイプで別のコマンドに渡した場合は自動的に無効になるため、その場合は明示的に-nを指定します。

// パイプ経由だと行番号が消える
$ rg 検索パターン | less
foo bar

// -n を指定すれば、パイプ経由でも行番号が残る
$ rg -n 検索パターン | less
3:foo bar

表示したくない場合は-N(--no-line-number)を使います。

マッチした数だけ知りたい(-c / --count)

$ rg --count 検索パターン
$ rg -c 検索パターン

-cオプションで、マッチした行の内容ではなく、行数だけを書きだせます。

マッチしたファイル名だけ知りたい(-l / --files-with-matches)

$ rg --files-with-matches 検索パターン
$ rg -l 検索パターン

-lオプションで、マッチした内容ではなく、ファイル名だけを書きだせます。

ディレクトリを再帰的に探したい(デフォルト)

$ rg 検索パターン 検索パス

grepは-rオプションが必要ですが、rgはデフォルトで再帰検索します。 .gitignoreに書かれたファイルは自動的に除外されます。 除外を無視してすべて検索したい場合は-u(--unrestricted)を使います。

ファイルの種類で絞り込みたい(-t / --type)

// Pythonファイルだけを検索したい
$ rg --type py 検索パターン
$ rg -t py 検索パターン

// 対応しているファイルタイプの一覧を見たい
$ rg --type-list

-tオプションで、拡張子を意識せずにファイルの種類を指定して検索できます。 find -name "*.py"のようなパターン指定より簡潔に書けます。

globパターンで絞り込みたい(-g / --glob)

// テストディレクトリを除外して検索したい
$ rg --glob "!test/**" 検索パターン 検索パス
$ rg -g "!test/**" 検索パターン 検索パス

-gオプションで、.gitignoreと同じ書き方のglobパターンを使って 検索対象のファイル・ディレクトリを絞り込めます。 test/**のようなパターンは検索パスの先頭からのパスにマッチするため、 検索パスを省略してカレントディレクトリを起点に検索するのが基本の使い方です。

前後の行も一緒に見たい(-A / -B / -C)

// マッチした行の後を3行表示したい
$ rg --after-context 3 検索パターン
$ rg -A 3 検索パターン

// マッチした行の前を3行表示したい
$ rg --before-context 3 検索パターン
$ rg -B 3 検索パターン

// マッチした行の前後を3行ずつ表示したい
$ rg --context 3 検索パターン
$ rg -C 3 検索パターン

-A(after)・-B(before)・-C(context)オプションで、 マッチした行だけでなく前後の行もあわせて確認できます。

マッチした文字列を置換したい(-r / --replace)

$ rg 検索パターン --replace 置換文字列
$ rg 検索パターン -r 置換文字列

-rオプションで、マッチした文字列を置換して表示できます。 ファイルの内容そのものは書き換わりません。

圧縮ファイルを検索したい(-z / --search-zip)

$ rg --search-zip 検索パターン 検索するファイル.gz
$ rg -z 検索パターン 検索するファイル.gz

-zオプションで、gzipなどで圧縮されたファイルを展開せずに検索できます。 grep系コマンドのzgrepに相当します。