ターミナルで特定の文字列を検索する方法[grep][ripgrep]

こんにちは!のせっちです。

クライアント要望などで、表記揺れ修正のため、特定の文字列を一括検索したいケースがあります。

複数ファイルの中から一つ一つ検索をかけるのは手間だし、作業漏れの可能性もあるため、ターミナルで一括検索をかけましょう。

grepコマンドを使う

grepを使えば簡単に検索可能です。

まずは基本形から

grep "検索する文字列" -rl 検索対象フォルダのパス

仮に『お客様』を検索したい場合は下記のようになります。

## あらかじめプロジェクトルートに移動しておく
grep "お客様" -rl .

検索対象のパスはプロジェクトルートにいれば.でOKです。

特定のフォルダを除外する

不要なフォルダは下記のようにして除外します。

grep --exclude-dir=除外するフォルダ名 "検索する文字列" -rl 検索対象フォルダのパス

node_modulesを除外したい場合は下記のようになります。

grep --exclude-dir=node_modules "検索する文字列" -rl 検索対象フォルダのパス

複数検索したい場合は{}で囲めばOKです。
例えば、コンパイル後のフォルダ(dist)を除外する場合

grep --exclude-dir={node_modules,dist} "検索する文字列" -rl 検索対象フォルダのパス

複数の文字列を検索する

複数文字列を検索したい場合は、-eを付けて書けばOKです。

grep -e "文字列1" -e "文字列2" -rl 検索対象フォルダのパス

grepよりおすすめの方法:ripgrep

grepを丁寧に説明してきましたが、ripgrepが更にオススメです。

特徴としては、下記です。

  • grepよりも処理が圧倒的に早い
  • いい感じに検索してくれる
    • .gitignoreや隠しファイルをデフォルトで無視してくれる

他にもいい感じの機能はたくさんあるのですが、ここでは基本的な使い方を見ていきます。

ripgrepのインストール

brew install ripgrep

他のインストール方法も公式のGithubで紹介されています。

installation: ripgrepのGithubより

使い方

先ほどのgrepの例では、下記のように書かないといけませんでした。

grep --exclude-dir=除外するフォルダ名 "検索する文字列" -rl 検索対象フォルダのパス

ripgrepなら下記でOKです。

rg "検索する文字列"

.gitignoreなどは自動的に除外、対象フォルダはカレントディレクリなら省略可能です!

まとめ

  • grepを使えばプロジェクト内の指定文字列を漏れなく検索できる。
  • ripgrepを使えばgrepよりもいい感じに検索できる。

この記事を書いた人

のせっち

福岡県出身。早稲田大学卒。創業100年の鉄鋼商社でバンコク駐在最年少抜擢。毎日擦り切れるまで働かなくても幸せに生きている人々を見てフリーランスになりました。
- WordPressが得意!
- 初心者向けGulp教材は購入者100部以上!