Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

【PowerShell】Select-StringコマンドレットでGrepのように文字列を検索する方法

Linux/Unix環境では、grepコマンドを使ってログファイル内の特定のテキスト(文字列)やエラーを検索するのが一般的です。また、パイプ(|)と組み合わせることで、別のコマンドが出力した結果から任意のデータを抽出することもできます。

command | grep search

WindowsのPowerShellでは、これに相当する機能を持つSelect-Stringコマンドレットが用意されており、ファイル内のテキスト文字列を手軽に検索できます。本記事では、Select-Stringの基本的な使い方から応用的な検索テクニックまでを解説します。

基本的な使い方:ファイル内から特定の文字列を検索する

たとえば、次のコマンドを実行すると、テキストファイルや標準出力の中にERRORという文字列を含むすべての行が表示されます。

Select-String -Path c:\tmp\makeapp_sxtracesxs.txt -Pattern "ERROR"

【PowerShell】Select-StringコマンドレットでGrepのように文字列を検索する方法

実行結果には、検索対象のテキストが見つかった行番号と、その行の内容が表示されます。これにより、大量のログからエラー箇所を素早く特定できます。

ワイルドカードを使って複数のファイルをまとめて検索する

特定のディレクトリ内にあるすべてのTXTファイルを対象に検索したい場合は、ワイルドカード(*)を活用して次のようなコマンドを実行します。

Select-String -Path c:\tmp\*.txt -Pattern "ERROR"

このコマンドは、フォルダ内のすべてのファイルを横断的に検索したい場合にも便利です。たとえば、Exchange Serverのトランスポート(SMTP)ログやメッセージ追跡ログなど、多数のログファイルから特定の記録を探す際に役立ちます。

Include/Excludeオプションで検索対象を絞り込む

-Includeオプションと-Excludeオプションを組み合わせると、検索に含めるファイルや除外するファイルを柔軟に指定できます。

次の例では、名前にcopyという文字列を含まないすべてのTXTファイルとLOGファイルを検索対象としています。

$path = "c:\tmp\*"
Select-String -Path $path -Pattern "ERROR" -Include "*.txt","*.log" -Exclude "*copy*"

サブフォルダも含めて再帰的に検索する方法

上記の例では、指定したディレクトリ直下のファイルしか検索されません。ネストされたサブディレクトリ内のファイルまで再帰的に検索したい場合は、Get-ChildItemコマンドレットと組み合わせます。

Get-ChildItem -Path 'c:\tmp\' -Recurse -include "*.mp3","*.avi" -ErrorAction SilentlyContinue | Select-String -SimpleMatch "ERROR","WARNING"

ここでは-SimpleMatchオプションを指定しています。これは正規表現として解釈せず、指定した文字列そのものに一致する行だけを検索するためのオプションです。カンマ区切りで複数のキーワード(この例では「ERROR」と「WARNING」)を指定することも可能です。

補足:大文字小文字を区別して検索したい場合

Select-Stringはデフォルトで大文字と小文字を区別しません。厳密に区別して検索したい場合は、-CaseSensitiveオプションを追加してください。

Select-String -Path c:\tmp\log.txt -Pattern "ERROR" -CaseSensitive

このように、Select-Stringコマンドレットを使いこなせば、Linuxのgrepと同等以上の柔軟なテキスト検索をPowerShell上で実現できます。日常的なログ解析やトラブルシューティングにぜひ活用してください。

  1. Windows 10でコマンドプロンプトまたはPowerShellを使ってWi-Fiを無効化する方法

    Windows 10では、コマンドプロンプトやPowerShellを使って、インターネット設定の管理をはじめとするさまざまなタスクを実行できます。この記事では、Windows 10においてコマンドプロンプトまたはPowerShellを使ってWi-Fi接続を無効にする方法をご紹介します。 Windows 10にはnetshという組み込みツールが用意されています。これはネットワーク接続とその構成を管理するためのコマンドラインユーティリティです。これを使えば、Wi-Fiやイーサネット接続の無効化、有効化、接続、切断など、多彩な操作が可能です。それでは、Windows 10でWi-Fi接続を無効にする

  2. 【findコマンド徹底解説】Linuxでファイルやディレクトリを柔軟に検索する方法

    Linuxのfindコマンドは、Linuxシステムにおいて最も重要かつ便利なコマンドの一つです。その名の通り、自分で設定したさまざまな条件や変数に基づいて、Linuxマシン上のファイルを検索できます。パーミッション、ユーザー、グループ、ファイルタイプ、日付、サイズなど、多彩な条件を組み合わせて目的のファイルを見つけられるのが特徴です。この記事では、findコマンドを使ってLinux上でファイルを検索する方法を詳しく解説します。 findコマンドはほとんどのLinuxディストリビューションにデフォルトで搭載されているため、追加でパッケージをインストールする必要はありません。 カレントディレクト