PowerShellでgrepコマンドは使える?「Select-String」での検索方法を解説

Unix系で利用可能な文字列検索コマンドである「grep」がWindowsのPowerShellで利用したいと思う場合、Unix系とは違ったやり方が必要となります。この記事ではPowerShellで「grep」コマンドと同じ内容での検索方法を解説します。

PowerShellでgrepコマンドは使える?「Select-String」での検索方法を解説のイメージ

目次

  1. 1PowerShellでgrepコマンドは使える?
  2. PowerShellでgrepコマンドは使える?
  3. 「Select-String」での検索方法
  4. 最後に

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の場合はワイルドカードは不要なので忘れやすいので注意が必要です。

ファイル名はワイルドカードで囲う場合と、ワイルドカードで囲わない場合がありますがその点は簡単に後述します。

大文字/小文字の区別

大文字・小文字の区別での抽出コマンド「Select-String "検索文字列" "ファイルパス" -CaseSensitive」

PowerShellでの大文字小文字の区別は「-CaseSensitive」を利用します。grepでの大文字小文字の区別は「-i」がこれに該当します。

文字列/正規表現で指定

正規表現での指定をするコマンド「Select-String "ファイルパス" -Pattern "検索文字列"」

PowerShellで検索したいテキストを文字列や正規表現で指定したい場合は「-Pattern」のオプションを利用します。grepでの「-E」がこれに相当とします。

マッチしない行表示

マッチしない行を表示するコマンド「Select-String "検索文字列" "ファイルパス" -NotMatch」

PowerShellで指定した内容/パターンに一致したものを除外し、一致しない行を検索したい場合は「-NotMatch」オプションを利用します。grepでマッチした行を除外してマッチしない行を表示する場合「-v」を利用しています。

マッチした前後表示

前後の行を抽出するコマンド「Select-String "検索文字列" "ファイルパス" -Context 行数」

PowerShellでマッチした行とその前後以外を除外して表示したい場合、「-Context」のオプションを指定します。後ろには抽出したい前後の行数を入力します。

grepでの前後表示は「-A」と「-B」が該当します。grepでの「-A」は後を、「-B」は前を示しますが、PowerShellではgrepのように前後別での表示はできません。

マッチした部分だけを表示

マッチした部分だけを表示するコマンド「Select-String "検索文字列" "ファイルパス" | % { $_.Matches.Value }」

PowerShellでマッチした部分以外を除外して表示したいのであれば「| % { $_.Matches.Value }」をつけてコマンドを実行します。grepでの「-o」に該当します。

ファイルから検索

ファイルパスは"(ワイルドカード)で囲って利用

特定のファイルから検索したい場合は、Select-Stringのコマンド内に検索したいファイル名を入力しておこないます。

ファイルの場所から指定する場合はワイルドカードが必要となることがある他、ファイル名を複数並べる場合はワイルドカードが必要となります。

最後に

PowerShellではgrepコマンドは使えませんが、代わりにSelect-Stringを利用してgrepと同じような使い方ができます。

大文字小文字の区分や前後生じなどオプションはgrepと大きく異なる部分が多いですが、この記事などを参考にしながらPowerShellでgrepの代わりのSelect-Stringを活用してみてください。

Thumb【Windows10】「Windows PowerShell」とは何かくわしく紹介!
今回の記事では、「Windows PowerShell」についての情報をお届けしていきます。...
Thumb【Windowsw10】フォルダ名/ファイル名を一括変更する方法を解説!
Windows10でフォルダ名やファイル名をまとめて一括変更したいと考えたことはありませんか...
Thumb 【Windows】コマンドプロンプトで再起動/シャットダウンをする方法!
Windowsでコマンドプロンプトから再起動する方法をご紹介します。カッコの悪いマウスを使い...

関連するまとめ

Original
この記事のライター
八千草 蛍
分かりやすく気軽に読める記事を書いてまいりたいと思います。よろしくお願いいたします。