PowerShellでgrep(文字列検索)を実現する方法

スポンサーリンク

Linuxではログ解析やファイル検索で grep を頻繁に利用します。しかし、WindowsのPowerShellには grep コマンドが標準搭載されていません。その代わりに、PowerShellには強力な検索コマンドレット Select-String が用意されています。Microsoftの公式ドキュメントでも、文字列検索やログ解析には Select-String の利用が推奨されています。

本記事では、PowerShellで grep のような検索を行う方法を紹介します。

Select-Stringの基本

Linuxのgrepに相当するコマンドです。sample.log ファイルから ERROR という文字列を grep します。

PS> Select-String -Path "sample.log" -Pattern "ERROR"
sample.log:25:ERROR Database connection failed.

パラメータは以下の通りです。

パラメータ説明
Path検索対象ファイル
Pattern検索する文字列

複数ファイルを一括検索する

ワイルドカードを利用して複数のログファイルを検索することもできます。

PS> Select-String -Path "*.log" -Pattern "ERROR"

大量のログファイルから特定のエラーメッセージを探したい場合に便利です。


大文字・小文字を区別する

PowerShellは既定では大文字・小文字を区別しません。

例えば次の検索では、

  • ERROR
  • Error
  • error

のすべてがヒットします。

PS> Select-String -Path "sample.log" -Pattern "error"

大文字・小文字を区別する場合は -CaseSensitive を指定します。

Select-String -Path "sample.log" -Pattern "ERROR" -CaseSensitive

複数のキーワードを検索する

複数の条件を指定することも可能です。

PS> Select-String -Path "*.log" -Pattern "ERROR","WARNING"
app.log:10:ERROR Application Error
app.log:50:WARNING Memory Usage High

障害調査時によく利用する方法です。

特定のフォルダ配下を再帰検索する

サブフォルダも含めて検索したい場合は Get-ChildItem と組み合わせます。

Get-ChildItem -Path C:\Logs -Recurse -Filter *.log | Select-String -Pattern "ERROR"

フォルダ配下にあるすべてのログファイルが検索対象になります。

正規表現を利用する

Select-String は正規表現に対応しています。

例として IPアドレスを検索します。

PS> Select-String -Path "*.log" -Pattern "\d+\.\d+\.\d+\.\d+"
server.log:54:Client IP=192.168.1.10

なお、正規表現の一覧はこちらにまとめています。

検索結果をファイルへ出力する

検索結果をテキストファイルとして保存することもできます。

Select-String -Path "*.log" -Pattern "ERROR" | Out-File "result.txt"

障害調査報告書やエビデンス取得時によく利用されます。

コメント

タイトルとURLをコピーしました