2022年09月20日更新
PowerShellでgrepコマンドは使える?「Select-String」での検索方法を解説
Unix系で利用可能な文字列検索コマンドである「grep」がWindowsのPowerShellで利用したいと思う場合、Unix系とは違ったやり方が必要となります。この記事ではPowerShellで「grep」コマンドと同じ内容での検索方法を解説します。
PowerShellでgrepコマンドは使える?
Unix系のOSであるLinuxなどでは、grepコマンドを利用することで文字列検索をすることができます。
PowerShellでgrepコマンドは使える?
このgrepコマンド、PowerShellでも利用したいと思う人もいますが、PowerShellでgrepコマンドは使えるのでしょうか。
PowerShellでは「grep」というコマンドはない
結論から言うとPowerShellで「grep」コマンドは使えません。そもそもgrepというコマンドがPowerShellに存在しないためです。
代わりに「Select-String」というコマンドを利用
grepが利用できない場合どう利用するのかですが、grepの代わりに「Select-String」というコマンドを利用します。
grepの代わりのコマンドとして十分利用可能なものなので、grepを利用したいと思った人はgrepの代わりにSelect-Stringを利用して文字列検索を実行してください。
「Select-String」での検索方法
grepの代わりに「Select-String」を利用した検索方法の説明に移ります。以下の説明で検索するファイルの対象(例示)は上記のとおりです。
なお、上級者向けですが連続したコマンド(パイプを繋げる)場合はパイプ記号(|)を利用します。パイプをつなげて「Select-String」でのAND検索なども可能なので、必要があればパイプをつなげたコマンドも実行してみましょう。
基本的な使い方
PowerShellの場合も、grepコマンドとおおむね使い方は同じです。Select-Stringとそれに関するオプションを組み合わせてコマンドを実行することで、grepと同じような結果をはじき出すことができます。詳細は後述します。
PowerShellでは検索文字はワイルドカードで囲って指定します。grepの場合はワイルドカードは不要なので忘れやすいので注意が必要です。
ファイル名はワイルドカードで囲う場合と、ワイルドカードで囲わない場合がありますがその点は簡単に後述します。
大文字/小文字の区別
PowerShellでの大文字小文字の区別は「-CaseSensitive」を利用します。grepでの大文字小文字の区別は「-i」がこれに該当します。
文字列/正規表現で指定
PowerShellで検索したいテキストを文字列や正規表現で指定したい場合は「-Pattern」のオプションを利用します。grepでの「-E」がこれに相当とします。
マッチしない行表示
PowerShellで指定した内容/パターンに一致したものを除外し、一致しない行を検索したい場合は「-NotMatch」オプションを利用します。grepでマッチした行を除外してマッチしない行を表示する場合「-v」を利用しています。
マッチした前後表示
PowerShellでマッチした行とその前後以外を除外して表示したい場合、「-Context」のオプションを指定します。後ろには抽出したい前後の行数を入力します。
grepでの前後表示は「-A」と「-B」が該当します。grepでの「-A」は後を、「-B」は前を示しますが、PowerShellではgrepのように前後別での表示はできません。
マッチした部分だけを表示
PowerShellでマッチした部分以外を除外して表示したいのであれば「| % { $_.Matches.Value }」をつけてコマンドを実行します。grepでの「-o」に該当します。
ファイルから検索
特定のファイルから検索したい場合は、Select-Stringのコマンド内に検索したいファイル名を入力しておこないます。
ファイルの場所から指定する場合はワイルドカードが必要となることがある他、ファイル名を複数並べる場合はワイルドカードが必要となります。
最後に
PowerShellではgrepコマンドは使えませんが、代わりにSelect-Stringを利用してgrepと同じような使い方ができます。
大文字小文字の区分や前後生じなどオプションはgrepと大きく異なる部分が多いですが、この記事などを参考にしながらPowerShellでgrepの代わりのSelect-Stringを活用してみてください。