nlコマンドを用いずにテキストに行番号をつける方法をまとめます。あまり細かい挙動にはこだわりません。今回はエディタ編です。
SED
非対話エディタの定番ですがStreamEDitorを利用した方法です。
=
とpaste
$ yes | head | sed = | paste - -
1 y
2 y
3 y
4 y
5 y
6 y
7 y
8 y
9 y
10 y
行番号と行テキストの間にタブが入るだけなので、書式はln
に近いですね。sed
は=
で行番号が出力できるのですが、改行されてしまいますのでpaste
で横に並べています。
$ yes | head -n 2 | sed =
1
y
2
y
Vim
代表的なテキストエディタ、Vimです。これも非対話に実行することができます。
:set number
$ yes | head | vim -es /dev/stdin +':set number' +%p +q!
1 y
2 y
3 y
4 y
5 y
6 y
7 y
8 y
9 y
10 y
書式はrn
です。Vimは-e
でexモードで実行、-s
はサイレントモードというオプションらしいです。/dev/stdin
は-
で置き換え可能ですが余計なメッセージが出ます。やっていることは、行番号を表示:set number
して、出力%p
して閉じるq!
だけですね。
$ yes | head | vim - -es +':set number' +%p +q!
Vim: 標準入力から読込中...
1 y
2 y
3 y
4 y
5 y
6 y
7 y
8 y
9 y
10 y
詳しくはこちら「【なにそれこわい】Vimシェル芸というvimshellとは異なる何かが誕生した模様」を読んでみてください。よくわかりません。
この他にもシェル芸botなどでおもしろい方法を見つけたら追記していこうと思います。