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などでおもしろい方法を見つけたら追記していこうと思います。