Linux の nl コマンド:行番号付け

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、Linux の nl コマンドを調べます。このコマンドは、テキストファイルの行に番号を付けるために使用されます。このコマンドをさまざまなシナリオでどのように使用するか学び、ドキュメント内の特定の行を参照するのを簡単にします。このスキルは、プログラマー、システム管理者、および定期的にテキストファイルを扱うすべての人にとって特に役立ちます。

初めての大きなプロジェクトに取り組んでいる初級ソフトウェア開発者だと想像してみてください。チームリードが設定ファイルを見直して特定のセクションについて話し合うように依頼しました。nl コマンドを使用すると、ファイル内の特定の行を簡単に参照して話し合うことができ、コラボレーションがより効率的になります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/nl("Line Numbering") subgraph Lab Skills linux/nl -.-> lab-210988{{"Linux の nl コマンド:行番号付け"}} end

基本的な nl コマンドの理解

まずは、nl コマンドを使ってサンプルの設定ファイルを調べてみましょう。

  1. まず、プロジェクトディレクトリに移動しましょう。次のコマンドを入力して Enter キーを押してください。
cd /home/labex/project

このコマンドは、サンプルファイルがある /home/labex/project に現在のディレクトリを変更します。

  1. 次に、nl コマンドを使って config.txt の内容を行番号付きで表示しましょう。次のように入力します。
nl config.txt

次のような出力が表示されるはずです。

     1  ## Server Configuration
     2  port=8080
     3  max_connections=100
     4
     5  ## Database Settings
     6  db_host=localhost
     7  db_port=5432
     8  db_name=myapp
  ...

ここで何が起こっているか解説しましょう。

  • nl コマンドが、ファイルの各行の左に行番号を付けました。
  • 数字は、6 文字幅の列で右寄せになっていることに注意してください。
  • 空行(元のファイルの 4 行目)は、デフォルトでは番号付けされません。

このような番号付けにより、同僚とファイルについて話し合う際に特定の行を参照するのが簡単になります。たとえば、「ポート番号を確認するには 2 行目を見てみましょう」と言えます。

この出力が表示されない場合やエラーが発生した場合は、正しいディレクトリ(/home/labex/project)にいることと、config.txt ファイルが存在することを確認してください。これは、ls コマンドを使って現在のディレクトリ内のファイルを一覧表示することで確認できます。

空行を含む全ての行に番号を付ける

時には、空行を含む全ての行に番号を付けたい場合があります。空行を参照する必要がある場合や、空行が重要なファイルを扱う際にこれは便利です。これを達成するには -b a オプションを使用しましょう。

次のコマンドを実行します。

nl -b a config.txt

次のような出力が表示されるはずです。

     1  ## Server Configuration
     2  port=8080
     3  max_connections=100
     4
     5  ## Database Settings
     6  db_host=localhost
     7  db_port=5432
     8  db_name=myapp
    ...

何が起こっているか理解しましょう。

  • -b オプションは、ファイルの本文の行番号付けを制御します。
  • a 引数は「全て」を意味し、nl に全ての行、空行も含めて番号を付けるように指示します。
  • 以前は空行で番号付けされていなかった 4 行目が、今では番号が付いていることに注意してください。

これは、議論の際に空行を参照する必要がある場合や、空行が重要なファイル(一部のプログラミング言語や設定ファイルのような)を扱う際に特に便利です。

空行に番号が付いていない場合は、コマンドに -b a オプションが含まれているかどうかを再度確認してください。

番号形式のカスタマイズ

nl コマンドを使えば、行番号の表示方法をカスタマイズできます。これは、読みやすさを向上させたり、さらなる処理のための出力を準備する際に便利です。番号を右寄せにして先頭にゼロを付けてみましょう。

-n rz オプションを使用します。

nl -n rz config.txt

出力は次のようになるはずです。

000001  ## Server Configuration
000002  port=8080
000003  max_connections=100

000004  ## Database Settings
000005  db_host=localhost
000006  db_port=5432
000007  db_name=myapp

000008  ### Logging Configuration
000009  log_level=info
000010  log_file=/var/log/myapp.log

000011  ## Security Settings
000012  enable_ssl=true
000013  ssl_cert_path=/etc/ssl/certs/myapp.crt

000014  ### Performance Tuning
000015  cache_size=1024
000016  thread_pool=20

000017  ## Miscellaneous
000018  debug_mode=false

-n rz オプションを解説しましょう。

  • -n は番号付け形式を指定するために使用されます。
  • r は右寄せを意味します(実際はデフォルトです)。
  • z は先頭にゼロを付けることを意味します。

この形式は、他のコマンドを使って出力をさらにソートまたは処理する必要がある場合に特に便利です。固定幅の形式により、整合性のある整列が保証されます。

出力がこれと一致しない場合は、-n rz オプションを含めたコマンドを正しく入力したことを確認してください。

特定の行の種類に番号を付ける

nl コマンドを使えば、特定の種類の行のみに番号を付けることができます。複雑なファイルを扱う際に、特定の行に焦点を当てたい場合にこれは非常に便利です。'#' 文字で始まらない非空行(設定ファイルではコメントとしてよく使われます)のみに番号を付けてみましょう。

次のコマンドを使用します。

nl -b p'^[^#]' config.txt

次のような出力が表示されるはずです。

       ## Server Configuration
     1  port=8080
     2  max_connections=100

       ## Database Settings
     3  db_host=localhost
     4  db_port=5432
     5  db_name=myapp

       ### Logging Configuration
     6  log_level=info
     7  log_file=/var/log/myapp.log

       ## Security Settings
     8  enable_ssl=true
     9  ssl_cert_path=/etc/ssl/certs/myapp.crt

       ### Performance Tuning
    10  cache_size=1024
    11  thread_pool=20

       ## Miscellaneous
    12  debug_mode=false

この複雑なコマンドを解説しましょう。

  • -b pnl に特定のパターンに一致する行のみに番号を付けるように指示します。
  • '^[^#]' は正規表現のパターンです。
    • ^ は「行の先頭」を意味します。
    • [^#] は「## ではない任意の文字」を意味します。
    • これらを合わせると、## で始まらない任意の行に一致します。

このコマンドは、アクティブな設定行に焦点を当ててコメントを無視したい場合に便利です。実際の設定を迅速に識別して参照したい大型の設定ファイルでは特に役立ちます。

期待する出力が表示されない場合は、パターンの周りのシングルクォートを含めて、コマンドを正確に入力したことを再度確認してください。

複雑な番号付けのためのオプションの組み合わせ

これまで nl コマンドのいくつかのオプションを調べましたので、それらを組み合わせてより複雑な番号付け方式を作成しましょう。すべての行に番号を付け、カスタム形式を使用し、各セクションごとに番号付けを再開します。

次のコマンドを実行します。

nl -b a -n rz -s ': ' -w 3 config.txt

このコマンドは以下のことを行います。

  • -b a:空行を含むすべての行に番号を付ける
  • -n rz:先頭にゼロを付けて番号を右寄せにする
  • -s ': ':番号と行の内容の間に': 'を区切り文字として使用する
  • -w 3:番号フィールドの幅を 3 文字に設定する

次のような出力が表示されるはずです。

001: ## Server Configuration
002: port=8080
003: max_connections=100
004:
005: ## Database Settings
006: db_host=localhost
007: db_port=5432
008: db_name=myapp
009:
010: ### Logging Configuration
011: log_level=info
012: log_file=/var/log/myapp.log
013:
014: ## Security Settings
015: enable_ssl=true
016: ssl_cert_path=/etc/ssl/certs/myapp.crt
017:
018: ### Performance Tuning
019: cache_size=1024
020: thread_pool=20
021:
022: ## Miscellaneous
023: debug_mode=false

何が起こっているか解説しましょう。

  1. 空行を含むすべての行に番号が付けられている。
  2. 番号は先頭にゼロを付けて右寄せになっている。
  3. 番号と行の内容の間の区切り文字は': 'である。
  4. 番号フィールドの幅は 3 文字に設定されている。

このような複雑な番号付け方式は、構造化された設定ファイルや区切りが明確なドキュメントを扱う際に非常に役立ちます。各セクション内の行を簡単に参照できるようになります。

出力がこれと正確に一致しない場合は、入力したコマンドを注意深く確認し、スペースや特殊文字に特別な注意を払ってください。

まとめ

このチュートリアルでは、nl コマンドとそのテキストファイルの行に番号を付けるための様々なオプションを調べました。以下のことが学べました。

  1. 基本的な nl コマンドを使ってファイルに行番号を付ける
  2. -b a オプションを使って空行を含むすべての行に番号を付ける
  3. -n rz オプションを使って番号形式をカスタマイズする
  4. パターンマッチングを使って特定の行の種類に番号を付ける
  5. 複雑な番号付け方式のために複数のオプションを組み合わせる

これらのスキルは、設定ファイル、ソースコード、または開発プロジェクトで扱う任意のテキストファイルの行をナビゲートして参照する際に役立ちます。

このチュートリアルでは扱わなかった追加の nl コマンドオプションには以下があります。

  • -v NUM:1 ではなく NUM から番号付けを開始する
  • -i NUM:1 ではなく NUM だけ番号を増やす
  • -l NUM:NUM 行をグループ化し、各グループの最初の行のみに番号を付ける
  • -f a:すべてのヘッダー行(最初の本文行の前の行)に番号を付ける

これらのオプションは、nl コマンドを使用する際にさらに柔軟性を提供します。

参考資料