0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nlコマンドAdvent Calendar 2020

Day 22

様々なコマンドでnlコマンドを代替する

Last updated at Posted at 2020-12-21

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はページャなので対話的に実行されます。しかしながらnlcat-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などでおもしろい方法を見つけたら追記していこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?