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
| Option | Argument | Wirkung | Beispiel |
|---|---|---|---|
-b | a | Nummeriert alle Zeilen einschließlich Leerzeilen. | nl -b a datei.txt |
-b | pREGEXP | Nummeriert nur Zeilen, die zum regulären Ausdruck passen. | nl -b 'p^T' datei.txt |
-i | ZAHL | Legt die Schrittweite zwischen Nummern fest. | nl -i 2 datei.txt |
-s | ZEICHENKETTE | Legt den Text zwischen Nummer und Zeileninhalt fest. | nl -s ': ' datei.txt |
-n | ln | Nummern linksbündig ohne führende Nullen. | nl -n ln datei.txt |
-n | rn | Nummern rechtsbündig ohne führende Nullen. | nl -n rn datei.txt |
-n | rz | Nummern 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.
| Format | Ausrichtung | Führende Nullen | Beispielausgabe |
|---|---|---|---|
ln | Linksbündig | Nein | 1 Alpha |
rn | Rechtsbündig | Nein | 1 Alpha |
rz | Rechtsbündig | Ja | 0001 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
| Eingabezeile | Standardverhalten | -b a | -b p^T |
|---|---|---|---|
| Normale nicht leere Zeile | Nummer | Nummer | Nur bei T am Anfang |
| Leerzeile | Keine Nummer | Nummer | Keine Nummer |
Zeile mit T am Anfang | Nummer | Nummer | Nummer |
| Zeile ohne Treffer | Nummer | Nummer | Keine Nummer, Zeile bleibt sichtbar |
Nummernformate im direkten Vergleich
| Format | Ausrichtung | Führende Nullen | Beispielausgabe |
|---|---|---|---|
ln | Links | Nein | 1 Alpha |
rn | Rechts | Nein | 1 Alpha |
rz | Rechts | Ja | 001 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
-iist die Schrittweite1. Verwende beispielsweisenl -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:
nlerzeugt 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.txtnummeriert standardmäßig nicht leere Zeilen ab1.-b aschließt Leerzeilen ein.-b pREGEXPnummeriert nur passende Zeilen, entfernt die anderen aber nicht.-iändert die Schrittweite,-sdas Trennzeichen und-ndie 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.