Linux-Befehl nl: Zeilennummerierung

LinuxBeginner
Jetzt üben

Einführung

In diesem Tutorial lernen Sie den Linux-Befehl nl kennen, mit dem sich Zeilen in Textdateien nummerieren lassen. Wir zeigen Ihnen, wie Sie den Befehl in verschiedenen Situationen einsetzen können, um bestimmte Zeilen in Dokumenten leichter zu finden und zu referenzieren. Diese Fähigkeit ist besonders für Programmierer, Systemadministratoren und alle nützlich, die regelmäßig mit Textdateien arbeiten.

Stellen Sie sich vor, Sie sind als Junior-Softwareentwickler an Ihrem ersten größeren Projekt beteiligt. Ihre Teamleitung bittet Sie, eine Konfigurationsdatei zu prüfen und bestimmte Abschnitte zu besprechen. Mit dem Befehl nl können Sie einzelne Zeilen schnell angeben und gemeinsam mit Ihrem Team besprechen, wodurch die Zusammenarbeit effizienter wird.

Den grundlegenden nl-Befehl verstehen

In diesem Schritt untersuchen Sie eine Beispielkonfigurationsdatei mit dem Befehl nl.

Wechseln Sie zunächst in das Projektverzeichnis. Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

cd /home/labex/project

Mit diesem Befehl wechseln Sie in das Verzeichnis /home/labex/project, in dem sich unsere Beispieldateien befinden.

Verwenden Sie nun den Befehl nl, um den Inhalt von config.txt mit Zeilennummern anzuzeigen. Geben Sie Folgendes ein:

nl config.txt | tee nl-basic.txt

Die Ausgabe sollte ungefähr so aussehen:

     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
     ...

Sehen wir uns an, was hier passiert:

  • Der Befehl nl fügt links neben jeder Zeile der Datei eine Zeilennummer hinzu.
  • Die Nummern sind in einer sechs Zeichen breiten Spalte rechtsbündig ausgerichtet.
  • Die leere Zeile (Zeile 4 in der ursprünglichen Datei) wird standardmäßig nicht nummeriert.
  • Der Befehl tee zeigt die Ausgabe an und speichert sie in nl-basic.txt.

Durch diese Nummerierung können Sie sich bei der Besprechung der Datei mit Ihren Kollegen leicht auf bestimmte Zeilen beziehen. Sie könnten beispielsweise sagen: „Sehen wir uns Zeile 2 an, um die Portnummer zu überprüfen.“

Falls die Ausgabe nicht angezeigt wird oder ein Fehler auftritt, stellen Sie sicher, dass Sie sich im richtigen Verzeichnis (/home/labex/project) befinden und die Datei config.txt existiert. Mit dem Befehl ls können Sie die Dateien im aktuellen Verzeichnis anzeigen.

Alle Zeilen einschließlich leerer Zeilen nummerieren

In diesem Schritt nummerieren Sie alle Zeilen, auch leere. Das ist hilfreich, wenn Sie sich auf Leerzeilen beziehen müssen oder mit Dateien arbeiten, in denen leere Zeilen eine Bedeutung haben. Verwenden Sie dazu die Option -b a.

Führen Sie den folgenden Befehl aus:

nl -b a config.txt | tee nl-all-lines.txt

Nun sollte die Ausgabe ungefähr so aussehen:

     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
     ...

Sehen wir uns an, was dabei geschieht:

  • Die Option -b legt fest, wie die Zeilen im Hauptteil der Datei nummeriert werden.
  • Das Argument a steht für „all“ und weist nl an, alle Zeilen einschließlich leerer Zeilen zu nummerieren.
  • Beachten Sie, dass die zuvor leere und nicht nummerierte Zeile 4 nun eine Nummer erhält.
  • tee zeigt die Ausgabe an und speichert sie in nl-all-lines.txt.

Das ist besonders nützlich, wenn Sie in Besprechungen auf leere Zeilen verweisen müssen oder mit Dateien arbeiten, in denen Leerzeilen eine besondere Bedeutung haben, etwa in bestimmten Programmiersprachen oder Konfigurationsdateien.

Falls die leere Zeile weiterhin keine Nummer erhält, überprüfen Sie, ob Sie die Option -b a in den Befehl aufgenommen haben.

Zahlenformat anpassen

In diesem Schritt passen Sie die Darstellung der Zeilennummern an. Das kann die Lesbarkeit verbessern oder die Ausgabe für die Weiterverarbeitung vorbereiten. Wir richten die Nummern rechtsbündig aus und ergänzen führende Nullen.

Verwenden Sie die Option -n rz:

nl -n rz config.txt | tee nl-zero-padded.txt

Die Ausgabe sollte folgendermaßen aussehen:

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

Die Option -n rz setzt sich wie folgt zusammen:

  • Mit -n wird das Format der Nummerierung festgelegt.
  • r bedeutet rechtsbündige Ausrichtung, die ohnehin der Standardeinstellung entspricht.
  • z fügt führende Nullen hinzu.
  • tee zeigt die Ausgabe an und speichert sie in nl-zero-padded.txt.

Dieses Format ist besonders praktisch, wenn Sie die Ausgabe mit anderen Befehlen sortieren oder weiterverarbeiten möchten, da die feste Breite für eine einheitliche Ausrichtung sorgt.

Falls Ihre Ausgabe davon abweicht, überprüfen Sie, ob Sie den Befehl einschließlich der Option -n rz korrekt eingegeben haben.

Bestimmte Zeilentypen nummerieren

In diesem Schritt verwenden Sie nl, um nur bestimmte Zeilentypen zu nummerieren. Das ist besonders hilfreich bei komplexen Dateien, wenn Sie sich auf bestimmte Zeilen konzentrieren möchten. Wir nummerieren ausschließlich nicht leere Zeilen, die nicht mit dem Zeichen # beginnen, da dieses in Konfigurationsdateien häufig für Kommentare verwendet wird.

Verwenden Sie den folgenden Befehl:

nl -b p'^[^#]' config.txt | tee nl-settings-only.txt

Die Ausgabe sollte ungefähr so aussehen:

       ## 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

Sehen wir uns diesen komplexeren Befehl im Detail an:

  • -b p weist nl an, nur Zeilen zu nummerieren, die einem bestimmten Muster entsprechen.
  • '^[^#]' ist ein regulärer Ausdruck:
    • ^ bedeutet „Beginn der Zeile“.
    • [^#] steht für „ein beliebiges Zeichen, das nicht # ist“.
    • Zusammen entspricht das allen Zeilen, die nicht mit # beginnen.
  • tee zeigt die Ausgabe an und speichert sie in nl-settings-only.txt.

Dieser Befehl ist nützlich, wenn Sie sich auf aktive Konfigurationszeilen konzentrieren und Kommentare ausblenden möchten. Besonders bei großen Konfigurationsdateien können Sie damit die tatsächlich verwendeten Einstellungen schnell erkennen und referenzieren.

Falls die erwartete Ausgabe nicht erscheint, überprüfen Sie sorgfältig, ob Sie den Befehl genau wie angegeben eingegeben haben, einschließlich der einfachen Anführungszeichen um das Muster.

Optionen für eine komplexe Nummerierung kombinieren

In diesem Schritt kombinieren Sie mehrere Optionen von nl, um ein komplexeres Nummerierungsschema zu erstellen. Sie nummerieren alle Zeilen, verwenden ein benutzerdefiniertes Format und legen die Breite des Nummernfelds fest.

Führen Sie den folgenden Befehl aus:

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

Dieser Befehl führt Folgendes aus:

  • -b a: Alle Zeilen einschließlich leerer Zeilen nummerieren
  • -n rz: Nummern rechtsbündig mit führenden Nullen ausrichten
  • -s ': ': ': ' als Trennzeichen zwischen Nummer und Zeileninhalt verwenden
  • -w 3: Die Breite des Nummernfelds auf drei Zeichen festlegen

Die Ausgabe sollte ungefähr so aussehen:

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

Was geschieht dabei genau?

  • Alle Zeilen werden nummeriert, auch leere Zeilen.
  • Die Nummern werden mit führenden Nullen rechtsbündig ausgerichtet.
  • Als Trennzeichen zwischen Nummer und Zeileninhalt wird : verwendet.
  • Die Breite des Nummernfelds wird auf drei Zeichen festgelegt.
  • Die angezeigte Ausgabe wird in nl-combined.txt gespeichert.

Dieses komplexe Nummerierungsschema ist besonders nützlich bei strukturierten Konfigurationsdateien oder Dokumenten mit klar abgegrenzten Abschnitten. So können Sie leicht auf einzelne Zeilen innerhalb bestimmter Abschnitte verweisen.

Falls Ihre Ausgabe nicht exakt übereinstimmt, überprüfen Sie den eingegebenen Befehl sorgfältig. Achten Sie dabei besonders auf Leerzeichen und Sonderzeichen.

Zusammenfassung

In diesem Tutorial haben wir den Befehl nl und seine verschiedenen Optionen zur Nummerierung von Zeilen in Textdateien kennengelernt. Dabei haben wir gelernt:

  1. Mit dem grundlegenden Befehl nl Zeilennummern zu einer Datei hinzuzufügen
  2. Mit der Option -b a alle Zeilen einschließlich leerer Zeilen zu nummerieren
  3. Mit der Option -n rz das Zahlenformat anzupassen
  4. Mithilfe von Mustern bestimmte Zeilentypen zu nummerieren
  5. Mehrere Optionen zu einem komplexen Nummerierungsschema zu kombinieren

Diese Kenntnisse helfen Ihnen dabei, Zeilen in Konfigurationsdateien, Quellcode oder beliebigen Textdateien in Ihren Entwicklungsprojekten gezielt aufzufinden und zu referenzieren.

Weitere Optionen des Befehls nl, die in diesem Tutorial nicht behandelt wurden, sind:

  • -v NUM: Die Nummerierung bei NUM statt bei 1 beginnen
  • -i NUM: Die Nummern jeweils um NUM statt um 1 erhöhen
  • -l NUM: NUM Zeilen zu einer Gruppe zusammenfassen und nur die erste Zeile jeder Gruppe nummerieren
  • -f a: Alle Kopfzeilen nummerieren, also die Zeilen vor der ersten Zeile des Hauptteils

Diese Optionen bieten noch mehr Flexibilität bei der Arbeit mit dem Befehl nl.