複数ファイルから文字列検索

やりたいこと

Windowsで大量のテキストファイルから、特定の文字列を含んでいる行を結果として出力する。
ようはgrepのような文字列検索を行う。
ファイル名、何行目、その行の内容を結果としてテキストファイルに出力する。
ログの解析等に使えるかと。

実現方法

PowerShellのSelect-Stringコマンドを使用する。
具体的には下記のコマンドを実行すればよい。

 

Select-String "Error" *.txt | Out-File -FilePath ../result.txt

 

特定のディレクトリ内で検索をかけるため、はじめに”cd”コマンドでディレクトリ移動しておくと良い。

“Error” : 検索したい文字列を入れる。ここでは”Error”の文字列を含む行を抽出している。
*.txt : 検索対象のファイル。ここではテキストファイル全て。ログの検索なら*.log。
Out-File -FilePath ../result.txt : 出力先のファイルを指定。ここでは一つ上の階層に出力している。理由は「注意点」参照。

注意点

調査対象の拡張子と結果ファイルの拡張子が同じ場合、同一ディレクトリに入れると永久ループになる。よって、拡張子を変えるかディレクトリを変える必要がある。

ファイルによっては文字エンコーディングが必要な場合がある。-Encodingオプションを使用。

参考

オプションはたくさんあるので、より細かい検索指定は可能。
詳細はMicrosoftのMSDNに載っている。