中断していたLinuxのLPIC問題集を再開したのですが、行番号付きでファイル内容を出力する、catコマンドの-n
オプションに遭遇しました。
ところが、行番号付きでファイル内容を出力するコマンドには、nl
もあります。
違いが気になったので、調べました。
空行の扱いに違いがある
サンプルとして、空行のある適当なテキストファイルを作成します。 なお、WSL2上のUbuntuにて実行しております。
$ vim abc a b c
cat -n
の場合
実際に実行してみると、空行にも行番号が振られていることがわかります。
$ cat -n abc 1 a 2 b 3 4 c
nl
の場合
同じく実行してみましたが、空行は空行として表示され、行番号が振られていないことがわかります。
$ nl abc 1 a 2 b 3 c
nl
でも空行に行番号を表示するには
nl
コマンドで空行にも行番号を表示するには、nl -ba
またはnl --body-numbering=a
とします。
nl -ba
$ nl -ba abc 1 a 2 b 3 4 c
nl --body-numbering=a
user@DESKTOP-H7STV4V:/tmp$ nl --body-numbering=a abc 1 a 2 b 3 4 c
nl
コマンドは、行番号を付与する条件に柔軟性があり、正規表現を使うことも可能なようです。
オプション 意味 a 全ての行に対して行番号を付ける t 空行以外に対して行番号を付ける n 空行に対して行番号を付ける pパターン パターン(基本正規表現)に一致する行に対して行番号を付ける https://www.atmarkit.co.jp/ait/articles/1703/30/news024.html より
まとめ
細かな差分ではありますが、大事なことかと思いますので、知っておいて損はなさそうです。
コマンド | 解説 |
---|---|
cat -n | 空行も行番号を表示する |
nl | 空行は行番号を付けない |
nl -ba | 空行も行番号を表示する |
nl --body-numbering=a` | 空行も行番号を表示する |