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
3月10日リンゴ
3月11日ばなな
3月12日いちご
3月13日ナッツ
3月14日ばなな
3月15日ばなな
「ばなな」が含まれている行だけ取り出したいとき
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:3月11日ばなな
・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 #ワイルドカード
この記事が気に入ったらサポートをしてみませんか?