見出し画像

PowerShell grep検索したい

grep検索とは
指定した文字列を含む行を検索して、結果を出力する機能です。

たとえば次のような中身のテキストファイルがあったとします

3月10日リンゴ
3月11日ばなな
3月12日いちご
3月13日ナッツ
3月14日ばなな
3月15日ばなな


ここから「ばなな」をgrep検索した場合
3月11日ばなな
3月14日ばなな
3月15日ばなな

このような結果を取り出すことができる検索機能です。


最近大量のログデータを扱うようなことがあり、サクラエディタでgrep検索して済ませたのですが、PowerShellでできないかな、と調べたらgrep検索の方法が分かったのでメモとして残します。


コマンドレット「Select-String」を使う
こんな感じのデータを用意しました

PS > cat c:\temp\test.log
310日リンゴ
311日ばなな
312日いちご
313日ナッツ
314日ばなな
315日ばなな


「ばなな」が含まれている行だけ取り出したいとき
Select-String -Pattern "ばなな" で検索します

PS C:\temp> Select-String -Pattern "ばなな" "c:\temp\test.log"

test.log:2:3月11日ばなな
test.log:5:3月14日ばなな
test.log:6:3月15日ばなな

↑このようになります


ファイル指定にはワイルドカードも使えます
Select-String -Pattern "ばなな" "c:\temp\test*.log"
Select-String -Pattern "ばなな" "c:\temp\*"


結果をファイルに出力することもできます。
Select-String -Pattern "ばなな" "c:\temp\test.log" | Out-File grep.log


「OR」「AND」「NOT」などの条件でも抽出可能

・OR検索

PS C:\temp> Select-String "c:\temp\test.log" -Pattern "いちご","ナッツ"

test.log:3:3月12日いちご
test.log:4:3月13日ナッツ

・AND検索

PS C:\temp> Select-String "c:\temp\test.log" -Pattern "ばなな" | Select-String "1日"

test.log:2:311日ばなな

・NOT検索

PS C:\temp> Select-String "c:\temp\test.log" -NotMatch -Pattern "ばなな"

test.log:1:3月10日リンゴ
test.log:3:3月12日いちご
test.log:4:3月13日ナッツ



文字コード問題
UTF-8のBOM付にしとかないと
PS C:\temp> Select-String "c:\temp\test.log" -Pattern "10"

test.log:1:3��10�������S

こんな感じになります。

#PowerShell #grep #コマンドレット #プログラミング初心者 #プログラミング学習 #Windows #ワイルドカード


この記事が気に入ったらサポートをしてみませんか?