【PowerShell】grepのようにデータ内から指定文字列のログを抽出する

こんにちわ。ますのです。
先日よりWindowsOSのログデータを扱ってプロキシサーバやファイヤウォールのログを見る機会が増えております。
Linuxではgrepコマンドで抽出したい文字列を1行ごと引っ張ってきてくれるのでやりやすいなぁ。。。と思って、わざわざLinuxで確認しようという無駄なことを考えた次第です。

PowerShellでも出来ないかなぁと調べたら、あるものですね。
何度も調べて引っ張り出してくるのが面倒なので備忘で残します。

grepのようなPowerShellコマンド:Select-Stringを使う

こんな感じのデータを用意しました

PS > cat c:\test\test.log
A00123456489
B00216548932
C01564231320
D19321634562

PS > Select-String "00" c:\test\test.log
test.log:1:A00123456489
test.log:2:B00216548932

※↓も同じ結果返ってきますのでどちらでもおけ
PS > Select-String "c:\test\test.log" -Pattern "00"
00が含まれる2行が抽出されたであります。
こんな感じで別途テキストでログ抽出して使っていました。
Select-String “00” c:\test\test.log > 00-test.log

「or」「and」「not」などの条件でも抽出可能

他にも検索として色々出来るようで。わりかし便利に使えそうです。

OR検索

PS > Select-String "c:\test\test.log" -Pattern "A0","D"
test.log:1:A00123456489
test.log:4:D19321634562

AND検索

PS > Select-String "c:\test\test.log" -Pattern "0" | Select-String "C"
test.log:3:C01564231320

NOT検索

PS > Select-String -Path "c:\test\test.log" -NotMatch -Pattern "00"
test.log:3:C01564231320
test.log:4:D19321634562

余談ですが・・・
もし出力した内容が折り返して困っちゃうわぁって時はPowerShellの幅をプロパティで変えると幸せになれるかもです。

Linux使うことに慣れていない社内SEのわたしとしてはWindowsで完結できるのはうれしい限りです。
わりとPowerShellって使い勝手が良いのだなぁと感じる今日この頃であります。
最新情報をチェックしよう!