Windowsでgrepで検索する方法をご紹介!

Windowsでgrepで検索する方法をご紹介!

Linuxでよく使用するファイル内テキスト検索コマンド「grep」。Windowsでも使えたら便利なのですが、残念ながらWindowsにgrepコマンドはありません。その代わりgrepコマンドの代わりになるコマンドが存在しているのでそちらを紹介していきます。


目次[非表示]

  1. Windowsでgrepで検索したい
  2. Windowsでgrepで検索する方法

Windowsでgrepで検索したい

Linuxユーザーならおなじみのgrepコマンド。grepコマンドは豊富かつ使いやすいオプションであることから、ファイル内のテキストを検索する際にとても重宝します。

grepコマンドを使えばバッチ・マクロを作成してファイルの検索を含む作業を自動化できるなど様々なメリットがあるので、Windowsでも同じように検索したいということがあるでしょう。

コマンドプロンプト
ですが、実はWindowsにgrepコマンドは存在しません。そのためコマンドプロンプトで「grep *.txt」のように検索しようとしてもコマンドが見つからずエラーになります。

だからといってWindowsのコマンドプロンプトでファイルやフォルダを検索することができないわけではありません。grepと同じように検索できるコマンドがいくつか用意されているため、そちらで代用すればgrepコマンドと同じように検索することが可能です。

Windowsでgrepで検索する方法

Windowsでgrepコマンドと同じように検索するには、findコマンド・findstrコマンド・PowerShell(コマンドプロンプトの上位互換)で使えるSelect-Stringコマンドレットの3種類です。

それぞれ書き方や特徴・注意点が異なるので順番に解説します。

コマンドプロンプト・PowerShellの起動方法

各コマンドの説明の前に、コマンドを使用するために必要なコマンドプロンプト・PowerShellを起動しておきましょう。

タスクバーに「cmd」と入力→クリックして起動
コマンドプロンプトを起動したい場合はタスクバーに「cmd」と入力すると見つかります。管理者権限で実行する必要はないのでそのままクリックして起動して大丈夫です。
「powershell」と検索し起動する
PowerShellの場合も同様に、「powershell」と検索するとWindows PowerShellが見つかるので、検索ボックスを使って起動するといいでしょう。

findコマンド

findコマンドはコマンドプロンプトで使用できます。findコマンドはShift-JISとBOMありUTF-16のみ対応しており、文字コードがこれら以外のテキストは検索することができません。

Windowsで作成したテキストファイルの多くはShift-JISなので問題ありませんが、一部ソフトウェアや別OSで作成したファイルなど文字コードがShift-JIS・BOMありUTF-16以外のものになっている可能性があるので注意しましょう。

構文は以下の通り。

find 検索文字列 検索対象ファイル名

いくつか使用できるオプションが存在し、各オプションを組み合わせればより詳細な絞り込み検索を行えます。
 

  • /V:検索対象文字列を含まない行をすべて表示
  • /C:検索対象文字列を含む行の数だけ表示
  • /N:検索で引っかかった行を表示
  • /I:大文字小文字を区別せずに検索
  • /OFF:オフライン属性が設定されたファイルをスキップしない

例えば、sample.txtにこんにちわ"が含まれているかどうか調べたい場合は以下のように記述します。

find こんにちわ sample.txt

このように記述することで自由に検索することが可能です。

findstrコマンド

findstrコマンドはfindコマンドを強化したコマンドです。findコマンドではただのテキストでしか検索することができませんでしたが、findstrコマンドでは正規表現を使って文字列検索できます。

正規表現を使いこなすのは少し大変ですが、慣れればとても便利ですので検索効率を上げたい場合は正規表現を見つけると良いでしょう。

こちらもfindコマンド同様Shift-JISとBOMありUTF-16にしか対応していないので注意してください。

findstrコマンドの構文は以下の通り。

findstr 検索対象文字列(正規表現) 検索対象ファイル

ただ検索するだけであればfindコマンドと大差ありません。ですが、使用できるオプションが増えています。

findstrコマンドで使用できるオプションは以下の通り。ちなみに以下のオプション説明に出てくるパターンとは正規表現のことです。

  • /B:行の先頭にあるパターンを検索
  • /E:行の末尾にあるパターンを検索
  • /L:検索文字列リテラルとして使用
  • /R:検索文字列正規表現として使用
  • /S:現在のフォルダとすべてのサブフォルダから一致するファイルを検索
  • /I:検索するときに大文字と小文字を区別しない
  • /X:検索文字列に完全に一致する行のみ表示
  • /V:検索文字列に一致しない行のみ表示
  • /M:検索文字列がヒットしたらファイル名のみ表示
  • /O:一致するか画像の前に文字オフセットを表示
  • /P:印刷不可能な文字を含むファイルをスキップ
findコマンドと同じオプション名でも、動作が変わっているオプション「/C」などがあるので注意しましょう。

例えば、正規表現を使ってsample.txtから電話番号(3ケタ-4ケタ-4ケタ)のテキストを探したい場合、以下のように記述します。

findstr [0-9]{3}-[0-9]{4}-[0-9]{4} sample.txt

正規表現を知っていて初めて使いこなせるコマンドですので覚えておきましょう。

Select-Stringコマンドレット

最後はSelect-Stringコマンドレットです。こちらはコマンドプロンプトでは使用できずPowerShell専用のコマンドとなります。

構文は以下の通り

Select-String 検索対象文字列 検索対象ファイル -Encoding default

構文はほか2つと比べて複雑で覚えるのが少し大変かもしれませんが、対応している文字コードが多くなっています。

複数ファイルからの検索もしやすくなっており、フォルダ内にある全てのtxtファイルにテキスト「こんにちわ」が含まれているかどうかをチェックする場合は以下のように記述できます。

Select-String こんにちわ *.txt -Encoding default

検索方法さえ覚えれば、オプションも少なく使いやすいコマンドですのでPowerShellを使う場合はこちらがいいかもしれません。


関連記事