PowerShell から検索テキストを取得するには?
grep
は Linux の強力なテキスト検索ユーティリティですが、Windows では利用できません。サード パーティのポートとソリューションが存在しますが、PowerShellgrep
には、スクリプトで同じ機能を実行する同等の機能が組み込まれています。
findstr を使用して PowerShell で検索する
PowerShell にはいくつかの異なる検索ユーティリティがあり、それぞれに独自の長所があります。最も単純なのはfindstr
、ネイティブの Windows 実行可能ファイルです。これは、コマンド ラインでの単純な検索操作のために grep を置き換えるのに適しています。たとえば、出力を渡しls
て一致を探すことができます。
ls | findstr "foo"
一度に複数の単語を検索したり、ワイルドカードを使用して何かに一致させたり、/R
フラグを使用して基本的な正規表現を渡したりすることもできます。
ls | findstr /R ba[a-z]\.txt
/C:
ただし、スペースを含めて明示的に検索する場合は、次のフラグを使用する必要があります。
ls | findstr /C:"foo"
Linux コマンド ラインに慣れていて、新しいコマンドを覚えたくない場合は、”grep” を のエイリアスとして設定できfindstr
ます。これにより、筋肉の記憶を節約できます。
new-alias grep findstr
PowerShell で Select-String を使用して grep を検索する
PowerShell が提供するもう 1 つのネイティブ メソッドはSelect-String
コマンドレットです。これは多くの点で似ていますfindstr
が、Windows 実行可能ファイルではなく PowerShell コマンドレットです。
これは、PowerShell スクリプトでより適切に機能することを意味し、最も重要なことは、PowerShell で美しく印刷できるオブジェクトとして出力を返すことです。また、PowerShell のタブ補完が機能するため、コマンド ラインでの使用も簡単です。
同じfindstr
ように機能し、ワイルドカードと正規表現を受け入れることができます。
ls | Select-String foo
ls | Select-String -Pattern <regexPattern>
引数をSelect-String
渡すことにより、ファイル内のテキストを検索するために使用できます。-Path
などの他のコマンドレットから渡された入力で使用することもできますGet-Content
。
Select-String -Path ".\foo.txt"-Pattern ba.*
コマンド ラインで使用する場合は、”grep” エイリアスを使用してすばやくアクセスすることもできます。
remove-alias grep
new-alias grep Select-String
コメントを残す