nlコマンドを用いずにテキストに行番号をつける方法をまとめます。あまり細かい挙動にはこだわりません。今回はエディタとスクリプトを除くコマンド編です。
cat
行番号をつけるコマンドといえば、nlよりもcatを思い浮かべる人が多いかもしれません。cat -nで行番号をつけることができます。
$ yes | head | cat -n
1 y
2 y
3 y
4 y
5 y
6 y
7 y
8 y
9 y
10 y
書式はrnです。大きな違いは空行にも行番号がつくことです。つまりnl -b a相当の振る舞いをします。
less
lessはページャなので対話的に実行されます。しかしながらnlやcat-nを使う場合もページャを組み合わせることは多いのではないでしょうか。-Nオプションをつけると、less単独で行番号を表示できます。
(スペースキーやfキーで最後まで表示するか、qキーで抜けられます)
$ yes | head | less -N
一応、1画面内で収まる行数であれば、-Fと-Eオプションを組み合わせることで非対話的に出力させることができるようです。自動的に表示する-Eだけではうまく表示できませんでした。
$ yes | head | less -E -F -N
1 y
2 y
3 y
4 y
5 y
6 y
7 y
8 y
9 y
10 y
lessも非常に多機能なコマンドなので、もしかしたら大きなファイルでもすべてを表示する方法があるかもしれません。
grep
grepは-nオプションでマッチした行に行番号をつけることができます。つまりすべての行にマッチさせれば、単純に行番号を出力できます。
$ yes | head | grep -n ^
1:y
2:y
3:y
4:y
5:y
6:y
7:y
8:y
9:y
10:y
セパレータは:です。桁数でガタガタになるのが嫌な場合は、-Tオプションを使うとタブを入れることができます。しかし、思ったのとはちょっと違うかもしれません。書式はほぼrnになります。
$ yes | head | grep -T -n ^
1: y
2: y
3: y
4: y
5: y
6: y
7: y
8: y
9: y
10: y
この他にもシェル芸botなどでおもしろい方法を見つけたら追記していこうと思います。