こんにちは!のせっちです。
クライアント要望などで、表記揺れ修正のため、特定の文字列を一括検索したいケースがあります。
複数ファイルの中から一つ一つ検索をかけるのは手間だし、作業漏れの可能性もあるため、ターミナルで一括検索をかけましょう。
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よりもいい感じに検索できる。