はじめに

こんにちは!今回はnlコマンドについて解説します。

nlはファイルの各行に番号を付与するコマンドです。cat -nでも行番号が表示できますが、nlはより細かい制御ができます。

ログファイルの確認やコードレビュー時に、行番号があると超便利ですね。

nlコマンドとは

nlは、テキストファイルの各行に番号を付けて表示するコマンドです。“number lines"の略ですね。

単に番号を付けるだけでなく、特定の行パターンだけに番号を付けたり、フォーマットを変更したり、複数行ごとに番号を付けたりできます。コードレビューやドキュメント作成時に活躍します。

基本構文

1
nl [オプション] [ファイル]

ファイルを指定しないと標準入力から読み込みます。

主なオプション

オプション 説明
-b { a | t | n | p正規表現 } 番号を付ける行を指定
-d 区切り文字 セクション区切り文字を指定
-f フォーマット 行番号のフォーマット(ln、rn、rz)
-i 数値 行番号のインクリメント値
-n フォーマット 行番号の配置(ln、rn、rz)
-s 区切り文字 行番号とテキストの区切り文字
-v 開始番号 行番号の開始値
-w 幅 行番号の幅(桁数)

使用例

例1: 基本的な行番号付け

1
nl file.txt

実行結果:

1
2
3
     1  apple
     2  banana
     3  cherry

ファイルの各行に番号が付きます。デフォルトでは右揃えで5桁。

例2: 空行にも番号を付ける

1
nl -b a file.txt

実行結果:

1
2
3
4
     1  apple
     2
     3  banana
     4  cherry

-b aで空行にも番号を付けます。デフォルトは-b t(空行は番号なし)。

例3: 番号を左揃えにする

1
nl -n ln file.txt

実行結果:

1
2
3
1     apple
2     banana
3     cherry

-n lnで行番号を左揃えにします。

例4: 番号の区切り文字を変更

1
nl -s ': ' file.txt

実行結果:

1
2
3
     1: apple
     2: banana
     3: cherry

-s ': 'で行番号とテキストの区切り文字をコロンに変更。

例5: 開始番号を指定

1
nl -v 10 file.txt

実行結果:

1
2
3
    10  apple
    11  banana
    12  cherry

-v 10で行番号を10から開始します。

例6: 行番号の幅を指定

1
nl -w 3 file.txt

実行結果:

1
2
3
  1  apple
  2  banana
  3  cherry

-w 3で行番号を3桁に指定します。

例7: インクリメント値を指定

1
nl -i 2 file.txt

実行結果:

1
2
3
     1  apple
     3  banana
     5  cherry

-i 2で行番号を2ずつ増加させます。

例8: 正規表現で番号を付ける行を限定

1
nl -b p'^a' file.txt

実行結果:

1
2
3
4
     1  apple
       banana
     2  avocado
       cherry

-b p'^a'aで始まる行だけに番号を付けます。

例9: パイプとの組み合わせ

1
cat large_file.txt | nl | head -20

大きなファイルの最初の20行に行番号を付けて表示します。

例10: ログファイルの確認

1
nl error.log | tail -50

エラーログの最後の50行に行番号を付けて表示。行番号があれば問題の場所を特定しやすい。

Tips・注意点

cat -n との違い

cat -nでも行番号を付けられますが、nlの方が柔軟です。

1
2
cat -n file.txt     # シンプルな行番号付け
nl file.txt         # より詳細な制御が可能

空行の扱い

デフォルトでは空行に番号が付きません。必要に応じて-b aを使います。

1
2
nl file.txt         # 空行は番号なし
nl -b a file.txt    # 空行にも番号を付ける

正規表現の活用

-b p正規表現で、条件に合う行だけに番号を付けられます。

1
2
nl -b p'^ERROR' error.log  # ERRORで始まる行だけに番号
nl -b p'warning' all.log   # warningを含む行だけに番号

実践的な使い方

コードレビュー時の行番号付け

1
nl script.sh | head -50

スクリプトを行番号付きで確認。特定の行番号を指摘しやすい。

ログファイルの問題個所特定

1
nl access.log | grep "500"

ステータスコード500のエラーを行番号付きで表示。

複数ファイルの比較

1
2
3
nl file1.txt > /tmp/f1.txt
nl file2.txt > /tmp/f2.txt
diff /tmp/f1.txt /tmp/f2.txt

2つのファイルを行番号付きで比較。

テキストファイルの特定行を参照

1
nl report.txt | grep "Summary"

レポートのSummaryセクションを行番号付きで表示。

まとめ

nlコマンドのポイント:

  • テキストファイルに行番号を付与する便利なコマンド
  • -b a: 空行にも番号を付ける
  • -n ln: 行番号を左揃えにする
  • -s: 区切り文字を変更
  • -v: 開始番号を指定
  • -b p正規表現: 条件に合う行だけに番号を付ける
  • よく使う組み合わせ: nl -b a, nl -n ln -s ': '

コードレビューやログ確認時に行番号があると、「〇〇行目の問題」という指摘ができるようになります。超便利ですね!