PowerShellについてなにもわからないので手探りで使ってみました。
nlコマンドについては説明しませんが、詳細を知りたい方は昔の記事をご覧ください。
PowerShellのnlコマンドレット
残念ながらそんなものは無いようです。コマンドレット(Cmdlet)とはPowerShellで利用可能なコマンドのことです。Get-Command
というコマンドレットを使えばシステムで利用可能なコマンドを取得できます。
line
やnum
をキーワードにnl
っぽいコマンドレットがあるか探してみましたが見つかりませんでした。-Name
オプションにはワイルドカードを使用できます。また、PowerShellでは大文字小文字を区別しないようです。
PS> Get-Command -Type Cmdlet -Name *num*
PS> Get-Command -Type Cmdlet -Name *line*
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-PSReadLineKeyHandler 2.0.0 PSReadLine
Cmdlet Get-PSReadLineOption 2.0.0 PSReadLine
Cmdlet Remove-PSReadLineKeyHandler 2.0.0 PSReadLine
Cmdlet Set-PSReadLineKeyHandler 2.0.0 PSReadLine
Cmdlet Set-PSReadLineOption 2.0.0 PSReadLine
nlコマンド相当の処理を書く
ForEach-Object
という、行ごと(オブジェクトごと)に繰り返すコマンドレットがあるので、これを利用すれば簡単に実装できます。nlコマンド相当の処理は以下のように書きます。
PS> ls | ForEach-Object -Begin { $count = 1 } -Process { "{0} {1}" -f $count++, $_ }
1 .vscode
2 3D Objects
3 Contacts
4 Desktop
…
どこかで見たことあるような構文ですが、これはawk
ですね。awk
で似たように書くとしたらこんな感じでしょうか。
$ ls | awk 'BEGIN { count = 1 } { print count++" "$0 }'
もっと簡潔に書く
ForEach-Object
には便利なエイリアスとして%
があるようです。また、コマンドレットだけでなくオプションも簡単に書くことができます。
PS> ls | % -b { $c = 1 } -p { "{0} {1}" -f $c++, $_ }
1 .vscode
2 3D Objects
3 Contacts
4 Desktop
…
このくらい短く書ければ普段使いもできそうです。
オプションを再現する
よく使いそうなやつだけやってみます。
-v
例えば-v 2
PS> ls | % -b { $c = 2 } -p { "{0} {1}" -f $c++, $_ }
2 .vscode
3 3D Objects
4 Contacts
5 Desktop
…
-i
例えば-i 5
PS> ls | % -b { $c = 1 } -p { "{0} {1}" -f $c, $_ ; $c+=5 }
1 .vscode
6 3D Objects
11 Contacts
16 Desktop
…
-f
オプションの中には代入式が書けないみたいです。インクリメントはできるのに。
-s
セパレーターをタブに。
PS> ls | % -b { $c = 1 } -p { "{0}`t{1}" -f $c++, $_ }
1 .vscode
2 3D Objects
3 Contacts
4 Desktop
…
タブは「`t」と書くようです。エスケープしにくいな...
-n ln
デフォルトが左揃えなので、lnの書式ですね。
-n rz / -w
5桁でゼロ埋めの右揃え。:D5
を指定すればいいようです。
PS> ls | % -b { $c = 1 } -p { "{0:D5} {1}" -f $c++, $_ }
00001 .vscode
00002 3D Objects
00003 Contacts
00004 Desktop
…
-n rn / -w
5桁で右揃え。,5
を指定すればいいようです。
PS> ls | % -b { $c = 1 } -p { "{0,5} {1}" -f $c++, $_ }
1 .vscode
2 3D Objects
3 Contacts
4 Desktop
…
このへんでおしまい。