超高速なテキスト検索コマンド rg (ripgrep) にはずっとお世話になっていますが、ちょっと凝った検索をしようとしたときに、オプションを忘れてしまうことが多いので、チートシートの形でまとめておきます。
Ripgrep チートシート
rg TODO- カレントディレクトリ以下ですべての「TODO」を検索します。
rg "^def add"- 行頭が
def addで始まる行を検索します(デフォルトで正規表現とみなされます)。
- 行頭が
rg -F "* + *"- 検索文字列を正規表現として解釈せず、そのままの文字列として検索します。上記の例では、
* + *という文字列を検索します。
- 検索文字列を正規表現として解釈せず、そのままの文字列として検索します。上記の例では、
rg -i TODO- 大文字・小文字を区別せずに「TODO」を検索します。
rg -w TODO- 単語単位で「TODO」を検索します。例えば
TODOSやMYTODOはマッチしません(安心してください、TODO:にはマッチします)。
- 単語単位で「TODO」を検索します。例えば
rg -C2 TODO- マッチした行の前後 2 行も一緒に表示します(
-A2 -B2と指定するのと同様)。
- マッチした行の前後 2 行も一緒に表示します(
rg -c TODO- 各ファイルごとにマッチした行数のみを表示します。
rg TODO src/mainsrc/mainディレクトリ以下(あるいは同名のファイル)で「TODO」を検索します。 ディレクトリであることを明示したい場合は、末尾にスラッシュを付けます(src/main/)。
rg -t py TODO- Python ファイル(拡張子
.py)のみを検索対象にします。 - ここで指定するタイプは拡張子ではなくファイルタイプです。指定できるファイルタイプの一覧は
rg --type-listで確認できます。 - 逆に、特定のファイルタイプを除外したい場合は
-T pyのように大文字の-Tを使います。 - 例えば、ファイルタイプとして
minified: *.min.css, *.min.html, *.min.jsが定義されているので、-T minifiedと指定するとmin系のファイルを除外できます。
- Python ファイル(拡張子
rg -g "*.{js,ts}" TODO- glob パターンで指定したファイルのみを検索対象にします。引数がシェルによって展開されないように、必ずクォートで囲みます。
- 大文字小文字を区別せずにマッチさせたい場合は、
-gの代わりに--iglobを使います。 - glob パターンの例:
-g "*.{js.ts}"… 拡張子が.jsまたは.tsのファイル--iglob "*test*… ファイル名にtestやTestを含むファイル-g "**/game/**/*.py"… 任意の階層のgameディレクトリ以下の.pyファイル-g "**/game/*.py"… 任意の階層のgameディレクトリ直下の.pyファイル-g "/.*"… この階層のドットファイル
rg --hidden TODO- 隠しファイル・隠しディレクトリも検索対象に含めます。
- ただし、ドットファイルだけを検索したい場合は、
-g ".*"のように glob パターンを使う方がよいです。
rg --no-ignore TODO.gitignoreや.ignore、$HOME/.rgignoreなどで無視されているファイル・ディレクトリも検索対象に含めます。
どのファイルが検索対象になっているかを調べる
--files オプションを使うと、実際にどのファイルが検索対象になっているかを確認できます。
試行錯誤しながら検索条件を調整したいときに便利です。
rg --filesrg --files -t jsrg --files -t js src/rg --files --hiddenrg --files -g "/.*"
具体的な使用例
$ rg -i -w TODO src/