Unix系で利用可能な文字列検索コマンドである「grep」がWindowsのPowerShellで利用したいと思う場合、Unix系とは違ったやり方が必要となります。この記事ではPowerShellで「grep」コマンドと同じ内容での検索方法を解説します。
Unix系のOSであるLinuxなどでは、grepコマンドを利用することで文字列検索をすることができます。
このgrepコマンド、PowerShellでも利用したいと思う人もいますが、PowerShellでgrepコマンドは使えるのでしょうか。
結論から言うとPowerShellで「grep」コマンドは使えません。そもそもgrepというコマンドがPowerShellに存在しないためです。
grepが利用できない場合どう利用するのかですが、grepの代わりに「Select-String」というコマンドを利用します。
grepの代わりのコマンドとして十分利用可能なものなので、grepを利用したいと思った人はgrepの代わりに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」に該当します。
1 / 2
続きを読む