Select-String コマンドレットの使用

文字列値の存在確認

Select-String コマンドレットを使用して何ができるでしょうか。機能の 1 つとして、テキスト ファイルに特定の文字列値が存在するかどうかを判断できることがあります。たとえば、ファイル C:\Scripts\Test.txt は次の情報を含むログ ファイルだとします。

Operation succeeded, 5/1/2006
Operation succeeded, 5/2/2006
Operation failed, 5/3/2006
Operation succeeded, 5/4/2006
Operation succeeded, 5/5/2006

ファイルのコンテンツを簡単にスキャンして、単語 "Failed" がどこかに存在するかどうかを確認します。存在する場合、いずれかの操作が失敗したことを示します。存在しない場合、すべての操作が成功したことを示します (また、失敗した処置について話している内容から判断して、皆さんが外科医ではないことを望みます)。この場合、以下のように指定できます。

Get-Content c:\scripts\test.txt | Select-String "Failed" -quiet

ここの目的は、Get-Content コマンドレットを使用して、ファイル C:\Scripts\Test.txt のコンテンツを取得することです。次にそのコンテンツを Select-String にパイプ処理し、Select-String で目的の文字列を検索します。-quiet パラメータを追加すると、文字列が見つかったときは True を返し、見つからなかった場合は何も返しません。-quiet パラメータを省略すると、Windows PowerShell は目的の文字列を含むテキスト ファイルの各行を返します。

Operation failed, 5/3/2006

便利と思われる Select-String パラメータとして -casesensitive があります。この場合、テキスト ファイルを大文字と小文字を区別して検索します。次のコマンドは何も返しません。つまり、対象文字列に Failed が見つかりませんでした。

Get-Content c:\scripts\test.txt | Select-String "Failed" -quiet -casesensitive

テキスト ファイルに Failed が見つからなかった理由はなぜでしょうか。これは簡単です。大文字と小文字を区別すると、ファイルにそのような文字列は見つかりません。ファイルには小文字の "f" の "failed" という文字列が含まれます。対象の検索文字列は大文字の "F" を含む "Failed" です。対象文字列を "failed" に変更すると (または -casesensitive パラメータを外すと)、コマンドは True を返します。

関連リンク