【PowerShell講座】grepについて

grepについて

※この記事は「2020年2月7日」に更新しました。

PowerShell講座です。

前回は、引数と受け取る方法を紹介しました。

【PowerShell講座】引数を受け取る

2020.02.03

今回は、grep(グレップ)についてです。

PowerShell でもテキストの grep はできますという記事です。

環境は、Windows 10(64bit)、PowerShell 6.1.2 です。



grep について

grep は、UNIX系(Linux など)で使えるコマンドです。

指定した文字列を検索するときに使うものです。

高機能エディタ(サクラエディタなど)を利用している方は一度は使ったことがあるのではないでしょうか。

Select-String

PowerShell で grep のような使い方をするコマンドレットは、Select-String です。

コマンドレットの形式は以下の通りです。

Select-String ファイルパス オプション

オプションには、以下のようなものがあります。

-Path
ファイルのパスを指定できます。フルパスではなく、ファイル名のみ指定した場合は、カレントディレクトリから検索される。
-Pattern
検索するテキストを文字列または正規表現で指定する。
-NotMatch
指定したパターンに一致しないファイルを検索する。
-CaseSensitive
大文字と小文字を区別する。省略すると区別しない。

カレントディレクトリ内のファイルを検索する

カレントディレクトリ内のファイルを検索する場合、以下のように書きます。

Select-String -path *.txt "検索する文字列"

フルパスでなく、ファイル名のみ指定した場合はカレントディレクトリを検索します。

例としてやってみます。

Select-String -path *.txt "iPhone 11" -Encoding oem

私が書いているブログネタのテキストから iPhone 11 について書いている部分を検索しました。

ちなみに、ワイルドカード(*)も使えるので、今回の場合、カレントディレクトリのテキストファイル全て対象になります。

エンコードを指定しているのは、文字化けしたからです(私が Shift-JIS でテキストを保存しているから)。

OutputEncoding は、UTF-8 になっていました。

oem を指定すると、上手く表示されました。

grepについて

サブディレクトリ内のファイルも検索する

先程紹介した方法だとサブディレクトリ内までは検索対象になりません。

しかし、サブディレクトリ内も検索してほしい場合がほとんどだと思います。

そんなときは以下のようにやってみましょう。

Get-ChildItem *.txt -Recurse | Select-String "iPhone 11" -Encoding oem

パイプも使っています。

-Recurse を指定すると再帰的に処理してくれます。

これで、サブディレクトリ内も検索します。

grepについて

最後に

いかがでしょうか。

grep は、プログラマーだと結構使う機会もあるかと思います(PowerShell でやるかは別として)。

シンプルにわりと高速で探してくれるので、使ったことがないという方は一度使ってみて下さい。