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というファイル名の外部コマンドです。外部コマンドの結果(標準出力?)は各行が文字列の配列としてパイプに渡されるので、文字列を条件とした絞り込みをしています。細かな条件を使いたい場合、必要な情報は文字列から正規表現などで切り出す必要があります。

PINGの代わりにTest-NetConnectionを使う方法もあります。Test-NetConnectionはPowerShellのコマンドレットですので、戻り値はオブジェクトで返りますので各種プロパティの値で絞り込みが可能です。
PowerShellでネットワークの疎通を確認するコマンド「Test-NetConnection」
ネットワーク上のPCと通信が出来るか確認する方法として、外部コマンドのPING.EXEやTRACERT.EXEを使って確認することが出来ます。 PowerShellでは「Test-NetConnection」というコマンド(コマンドレット)...

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

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

コメント