PowerShellでlsの結果をgrepのように絞り込みたい。

powershellコンピュータ
powershell

Aから始まり拡張子が.XLSのファイルを指定

likeでざっくりマッチング

ls | ? { $_ -like "A*.XLS" }

正規表現でNameプロパティとマッチング

ls | ? { $_.Name -match "^A.+\.XLS" }

ファイルサイズが500より小さいファイルで絞り込み

ls | ? { $_.Length -lt 500 }

PowerShellにおけるlsはGet-ChildItemというコマンドレットの別名(エイリアス)です。結果がオブジェクトでファイル名やファイルサイズなどがプロパティとしてアクセスすることが出来るので、プロパティを条件に絞り込むことが出来ます。

外部コマンドとマッチング

ping 192.168.1.1 | ? { $_ -like "*パケット*" }

PINGはPING.EXEというファイル名の外部コマンドです。外部コマンドの結果は各行が文字列の配列として結果が返るので、文字列を条件とした絞り込みをしています。細かな条件を使いたい場合、必要な情報は文字列から正規表現などで切り出す必要があります。

また、純粋に文字列のみを正規表現で抽出するのであればSelect-Stringコマンドレットの方がgrepぽいです。

Select-String ./*.txt -Pattern "検索文字列"

コメント