まくろぐ
更新: / 作成:

超高速なテキスト検索コマンド rg (ripgrep) にはずっとお世話になっていますが、ちょっと凝った検索をしようとしたときに、オプションを忘れてしまうことが多いので、チートシートの形でまとめておきます。

Ripgrep チートシート

  • rg TODO
    • カレントディレクトリ以下ですべての「TODO」を検索します。
  • rg "^def add"
    • 行頭が def add で始まる行を検索します(デフォルトで正規表現とみなされます)。
  • rg -F "* + *"
    • 検索文字列を正規表現として解釈せず、そのままの文字列として検索します。上記の例では、* + * という文字列を検索します。
  • rg -i TODO
    • 大文字・小文字を区別せずに「TODO」を検索します。
  • rg -w TODO
    • 単語単位で「TODO」を検索します。例えば TODOSMYTODO はマッチしません(安心してください、TODO: にはマッチします)。
  • rg -C2 TODO
    • マッチした行の前後 2 行も一緒に表示します(-A2 -B2 と指定するのと同様)。
  • rg -c TODO
    • 各ファイルごとにマッチした行数のみを表示します。
  • rg TODO src/main
    • src/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 系のファイルを除外できます。
  • rg -g "*.{js,ts}" TODO
    • glob パターンで指定したファイルのみを検索対象にします。引数がシェルによって展開されないように、必ずクォートで囲みます。
    • 大文字小文字を区別せずにマッチさせたい場合は、-g の代わりに --iglob を使います。
    • glob パターンの例:
      • -g "*.{js.ts}" … 拡張子が .js または .ts のファイル
      • --iglob "*test* … ファイル名に testTest を含むファイル
      • -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 --files
  • rg --files -t js
  • rg --files -t js src/
  • rg --files --hidden
  • rg --files -g "/.*"

具体的な使用例

src ディレクトリ以下で TODO を検索
$ rg -i -w TODO src/

関連記事

まくろぐ
サイトマップまくへのメッセージ