PowerShell(Where-Object)


アニメ『クリオネの灯り』

クラスのいじめられっこと仲良くなって助ける話、ですかね。一話が短いので忙しい仕事の合間に見られます。その点は良いところです。内容はまっすぐなんでしょうけど、今のところ感動できない自分がいます。ん~何でしょうか、大人向けじゃないんだろうなあ。まあ最終回まで見て感動したら、この感想文も書き換わっていることと思います。

最近はPowerShellを学習したい気持ちばかりなので、見てるアニメの内容と連動していないですが、今回も御多分に漏れず、です。
Where-Objectを使ってみます。省略形は、?です。

(本記事はPowerShell入門記事としてコチラにもまとめています。)

ForEach-Objectを使ってWhere-Objectを表現すると、

PS C:\Users\takk\aaa> 1..10 | %{if($_ % 2){$_}}
1
3
5
7
9
PS C:\Users\takk\aaa> 

となります。

Where-Objectを使うと少しだけ短いコマンドラインとなります。

PS C:\Users\takk\aaa> 1..10 | ?{$_ % 2}
1
3
5
7
9
PS C:\Users\takk\aaa>

ファイル一覧に対して、Where-Objectを使ってみましょう。
実験ファイルを適当に作成します。

PS C:\Users\takk\aaa> 1..10 | %{$fname="file$_.txt";"HELLO" > $fname}

このようにファイルが10個できました。

PS C:\Users\takk\aaa> gci


    ディレクトリ: C:\Users\takk\aaa


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2017/07/30     23:27         16 file1.txt
-a---        2017/07/30     23:27         16 file10.txt
-a---        2017/07/30     23:27         16 file2.txt
-a---        2017/07/30     23:27         16 file3.txt
-a---        2017/07/30     23:27         16 file4.txt
-a---        2017/07/30     23:27         16 file5.txt
-a---        2017/07/30     23:27         16 file6.txt
-a---        2017/07/30     23:27         16 file7.txt
-a---        2017/07/30     23:27         16 file8.txt
-a---        2017/07/30     23:27         16 file9.txt

-likeを使って、10という文字列が含まれている行のみ抽出します。

PS C:\Users\takk\aaa> gci | ?{$_ -like "*10*"}


    ディレクトリ: C:\Users\takk\aaa


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2017/07/30     23:27         16 file10.txt


PS C:\Users\takk\aaa>

正規表現を使っての抽出には、-matchを使います。

PS C:\Users\takk\aaa> gci | ?{$_ -match "[135]"}


    ディレクトリ: C:\Users\takk\aaa


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2017/07/30     23:27         16 file1.txt
-a---        2017/07/30     23:27         16 file10.txt
-a---        2017/07/30     23:27         16 file3.txt
-a---        2017/07/30     23:27         16 file5.txt


PS C:\Users\takk\aaa>

コメント

タイトルとURLをコピーしました