VMware ESXi and vSphere Cluster Management

Linux nl-Befehl: Datei- und Textzeilen nummerieren

Lerne den Linux-Befehl nl kennen: Zeilen nummerieren, Leerzeilen einschließen, Muster verwenden, Schrittweiten festlegen und Ausgabeformate anpassen.

Der Linux-Befehl nl gibt Text mit vorangestellten Zeilennummern aus. Er eignet sich für die Kontrolle von Konfigurationsdateien, die lesbare Darstellung von Text und die Weiterverarbeitung in Pipes.

Wichtig: nl verändert die Eingabedatei bei normaler Verwendung nicht. Die Quelldatei wird gelesen, während die nummerierte Fassung auf der Standardausgabe erscheint.

Grundaufbau und Eingabequellen

Mit einem Dateinamen liest nl diese Datei:

nl datei.txt

Ohne Dateinamen liest nl von der Standardeingabe. Dadurch kann der Befehl Daten aus einer Pipe oder aus einer Umleitung verarbeiten:

printf 'Alpha\n\nBeta\n' | nl -b a

Die nummerierte Ausgabe kann anschließend in eine neue Datei umgeleitet werden. Das bewusste Schreiben in eine neue Datei ist sicherer, als die Quelldatei direkt zu überschreiben:

nl datei.txt > nummerierte-datei.txt

Grundlegende Nummerierung

Der einfachste Aufruf lautet:

nl datei.txt

Standardmäßig beginnt die Zählung bei 1 und wird für nicht leere Textzeilen um jeweils 1 erhöht. Eine Leerzeile wird zwar ausgegeben, erhält im üblichen Standardmodus aber keine Nummer.

Alpha

Beta
Gamma

Eine typische Ausgabe sieht so aus:

     1  Alpha

     2  Beta
     3  Gamma

Die Zahl steht vor dem Inhalt. Das Standardtrennzeichen sorgt für Abstand zwischen Nummer und Text.

Mit -b festlegen, welche Zeilen nummeriert werden

Die Option -b bestimmt den Nummerierungsmodus. Sie beeinflusst nur, welche Zeilen eine Nummer erhalten. Alle Eingabezeilen bleiben in der Ausgabe erhalten.

Alle Zeilen mit -b a nummerieren

Der Modus a steht für alle Zeilen. Dazu gehören auch Leerzeilen:

nl -b a datei.txt

Bei der Beispiel-Eingabe erhalten die drei sichtbaren Zeilen und die Leerzeile eigene Nummern:

     1  Alpha
     2  
     3  Beta
     4  Gamma

Nur passende Zeilen mit -b pREGEXP nummerieren

Mit -b pREGEXP wird ein regulärer Ausdruck angegeben. Nur Zeilen, die auf dieses Muster passen, erhalten eine Nummer. Nicht passende Zeilen werden weiterhin ausgegeben, bleiben aber ohne Nummer.

Der Ausdruck ^ ist ein Anfangsanker: Er verlangt, dass das folgende Muster am Beginn der Zeile steht. ^T bedeutet daher: Die Zeile beginnt mit dem Großbuchstaben T.

nl -b 'p^T' datei.txt

Das Quoting schützt das Muster vor einer unerwünschten Interpretation durch die Shell. Die Schreibweise ist außerdem case-sensitiv: Titel passt, titel normalerweise nicht.

Optionen im Überblick

OptionArgumentWirkungBeispiel
-baNummeriert alle Zeilen einschließlich Leerzeilen.nl -b a datei.txt
-bpREGEXPNummeriert nur Zeilen, die zum regulären Ausdruck passen.nl -b 'p^T' datei.txt
-iZAHLLegt die Schrittweite zwischen Nummern fest.nl -i 2 datei.txt
-sZEICHENKETTELegt den Text zwischen Nummer und Zeileninhalt fest.nl -s ': ' datei.txt
-nlnNummern linksbündig ohne führende Nullen.nl -n ln datei.txt
-nrnNummern rechtsbündig ohne führende Nullen.nl -n rn datei.txt
-nrzNummern rechtsbündig mit führenden Nullen.nl -n rz datei.txt

Schrittweite mit -i

Mit -i wird das Zählintervall festgelegt. Ohne diese Option beträgt die Schrittweite 1. Eine Schrittweite von 2 erzeugt beispielsweise die Folge 1, 3, 5:

nl -i 2 datei.txt

Ebenso sind andere positive Werte möglich:

nl -i 5 datei.txt

Die Schrittweite lässt sich mit einem Nummerierungsmodus kombinieren. Bei -b p^T -i 5 wird nur für passende Zeilen gezählt, und die nächste passende Zeile erhält die um fünf erhöhte Nummer.

Trennzeichen mit -s anpassen

-s legt die Zeichenfolge zwischen der Nummer und dem eigentlichen Zeileninhalt fest. Das kann ein Tabulator, ein Leerzeichen, ein Doppelpunkt oder ein Bindestrich sein.

nl -s ': ' datei.txt

Eine Ausgabe kann dann beispielsweise so aussehen:

     1: Alpha
     2: Beta

Leerraum und Sonderzeichen sollten passend gequotet werden. Die Zeichenfolge ': ' steht deshalb in einfachen Anführungszeichen. Auch ein Bindestrich oder andere Shell-Sonderzeichen können Quoting erforderlich machen.

Ausrichtung und führende Nullen mit -n

Die Option -n bestimmt das Darstellungsformat der Nummern. Sie verändert nicht, welche Zeilen nummeriert werden.

FormatAusrichtungFührende NullenBeispielausgabe
lnLinksbündigNein1 Alpha
rnRechtsbündigNein 1 Alpha
rzRechtsbündigJa0001 Alpha

ln: linksbündig

nl -n ln datei.txt

Die Nummern beginnen am linken Rand ihres Nummernfelds und werden nicht mit Nullen aufgefüllt.

rn: rechtsbündig ohne Nullen

nl -n rn datei.txt

Die Nummern stehen rechtsbündig in einem gemeinsamen Feld. Das ist für eine gut lesbare Spaltenausrichtung nützlich.

rz: rechtsbündig mit Nullen

nl -n rz datei.txt

Bei rz werden kleinere Nummern mit führenden Nullen aufgefüllt. Feste Nummernbreiten sind für Protokolle, maschinenlesbare Ausgaben und bestimmte Sortiervorgänge praktisch, weil die Zeichenketten dieselbe Breite behalten.

Praktische Kombinationen

Optionen lassen sich kombinieren, um die Ausgabe an einen konkreten Zweck anzupassen. Dieses Beispiel nummeriert nur Zeilen, die mit T beginnen, verwendet Fünferschritte und setzt - zwischen Nummer und Inhalt:

nl -b 'p^T' -i 5 -s ' - ' datei.txt

Für eine vollständige, gut erkennbare Ausgabe mit Nullauffüllung können alle Zeilen nummeriert und ein eigenes Trennzeichen verwendet werden:

nl -b a -n rz -s ': ' datei.txt

Auch Daten aus einer Pipe können direkt formatiert werden:

printf 'Titel\nText\n\nTest\n' | nl -b 'p^T' -i 2 -s ' - '

In diesem Fall werden alle Eingabezeilen ausgegeben, aber nur Titel und Test nummeriert. Die Leerzeile bleibt sichtbar und erhält keine Nummer, weil der Muster-Modus nur passende Zeilen auswählt.

Vergleich der Nummerierungsmodi

EingabezeileStandardverhalten-b a-b p^T
Normale nicht leere ZeileNummerNummerNur bei T am Anfang
LeerzeileKeine NummerNummerKeine Nummer
Zeile mit T am AnfangNummerNummerNummer
Zeile ohne TrefferNummerNummerKeine Nummer, Zeile bleibt sichtbar

Nummernformate im direkten Vergleich

FormatAusrichtungFührende NullenBeispielausgabe
lnLinksNein1 Alpha
rnRechtsNein 1 Alpha
rzRechtsJa001 Alpha

Typische Fehler und Lösungen

  • Leerzeilen haben keine Nummer: Das ist das Standardverhalten. Verwende nl -b a datei.txt, wenn jede Zeile nummeriert werden soll.
  • Manche sichtbaren Zeilen bleiben ohne Nummer: Im Muster-Modus erhält nur eine Zeile mit Treffer eine Nummer. Prüfe insbesondere Groß-/Kleinschreibung und den Anfangsanker ^.
  • Die Nummern steigen nur um eins: Ohne -i ist die Schrittweite 1. Verwende beispielsweise nl -i 5 datei.txt.
  • Das Trennzeichen sieht falsch aus: Leerzeichen und Sonderzeichen müssen für die Shell korrekt gequotet werden, etwa mit -s ': '.
  • Die Quelldatei enthält keine Nummern: nl erzeugt standardmäßig nur eine Ausgabe. Leite sie bei Bedarf in eine neue Datei um und prüfe die Ausgabe vor einem Überschreiben.

nl in Pipes und bei der Textprüfung

nl ist besonders nützlich, wenn die Eingabe nicht als dauerhafte Datei vorliegt. In einer Pipe kann es die Ausgabe eines anderen Befehls nummerieren:

some-command | nl

Damit lassen sich Textausgaben leichter besprechen, bestimmte Zeilen identifizieren oder Zwischenergebnisse prüfen. Für die reine Anzeige ohne Nummerierung ist cat einfacher; für große Dateien eignet sich less. Zur Auswahl nach Mustern oder zur weitergehenden Verarbeitung kommen unter anderem grep, sed und awk infrage.

Merksätze für die Praxis

  • nl datei.txt nummeriert standardmäßig nicht leere Zeilen ab 1.
  • -b a schließt Leerzeilen ein.
  • -b pREGEXP nummeriert nur passende Zeilen, entfernt die anderen aber nicht.
  • -i ändert die Schrittweite, -s das Trennzeichen und -n die Ausrichtung beziehungsweise Nullauffüllung.
  • Der Anfangsanker ^ prüft den Beginn einer Zeile, zum Beispiel in ^T.
  • Die Eingabedatei bleibt unverändert, solange die Ausgabe nicht ausdrücklich in eine Datei geschrieben wird.

Weitere Grundlagen zur einfachen Dateiausgabe findest du bei den Linux-Befehlen zur nummerierten Textausgabe.