VMware ESXi and vSphere Cluster Management
Linux cut-Befehl: Zeichen und Felder aus Textzeilen auswählen
Lerne den Linux-Befehl cut kennen: Zeichen, Bytes und Felder auswählen, Trennzeichen verwenden, Pipes einsetzen und typische Fehler bei Textdateien vermeiden.
Der Linux-Befehl cut wählt aus jeder Eingabezeile bestimmte Zeichen, Bytes oder Felder aus. Er eignet sich besonders für einfache, zeilenbasierte Textdaten und Dateien, deren Inhalte durch ein einzelnes Trennzeichen gegliedert sind.
cut verändert die Quelldatei nicht. Die ausgewählten Daten werden normalerweise auf die Standardausgabe geschrieben, also im Terminal angezeigt oder an einen weiteren Befehl weitergereicht.
Was macht cut?
Eine Textzeile kann entweder aus festen Zeichenpositionen oder aus Feldern bestehen. Bei festen Positionen ist beispielsweise immer das dritte Zeichen interessant. Bei Feldern wird eine Zeile an einem Trennzeichen geteilt, etwa an einem Doppelpunkt oder Tabulator.
Beispielzeile:
admin:x:1000:1000:Administrator:/home/admin:/bin/bash
Mit -f und dem Trennzeichen : kann daraus beispielsweise das erste und siebte Feld ausgewählt werden. Das Ergebnis lautet dann admin:/bin/bash.
Grundsyntax und Eingabequellen
Die allgemeine Syntax lautet:
cut OPTIONEN DATEI
Eine Auswahloption für Zeichen, Bytes oder Felder ist erforderlich. Eine Datei liest cut direkt aus dem Dateinamen:
cut -c 3 results.txt
Alternativ verarbeitet cut Daten aus der Standardeingabe. Das geschieht entweder durch eine Pipe oder durch eine Eingabeumleitung:
grep 'status=ok' protokoll.txt | cut -d ' ' -f 1
cut -f 1 < daten.tsv
Bei einer Pipe wird die Ausgabe von grep zur Eingabe von cut. Die Quelldatei bleibt auch bei solchen Kombinationen unverändert.
Zentrale Optionen von cut
| Option | Zweck | Beispielhafte Angabe | Hinweis |
|---|---|---|---|
-c | Zeichenpositionen auswählen | -c 2-6 | Positionen beginnen bei 1 |
-b | Bytepositionen auswählen | -b 1-4 | Bei Mehrbyte-Zeichen besonders beachten |
-f | Felder auswählen | -f 1,3 | Standardtrennzeichen ist der Tabulator |
-d | Ein einzelnes Feldtrennzeichen festlegen | -d ':' | Wird normalerweise mit -f kombiniert |
-s | Zeilen ohne Trennzeichen unterdrücken | -s | Nur bei uneinheitlichen Felddaten relevant |
Zeichenpositionen mit -c auswählen
Die Option -c steht für die Auswahl von Zeichenpositionen. Die Zählung beginnt bei 1, nicht bei 0.
Ein einzelnes Zeichen
Der folgende Befehl gibt aus jeder Zeile von results.txt das dritte Zeichen aus:
cut -c 3 results.txt
Enthält eine Zeile weniger als drei Zeichen, wird nur der vorhandene passende Bereich ausgegeben.
Mehrere einzelne Positionen
Eine durch Kommas getrennte Liste wählt mehrere Positionen aus:
cut -c 1,3,5 results.txt
Aus jeder Zeile werden das erste, dritte und fünfte Zeichen in der angegebenen Reihenfolge des Bereichs ausgegeben. Die Ausgabe enthält keine zusätzlichen Trennzeichen zwischen den ausgewählten Zeichen.
Zusammenhängende Bereiche
Mit einem Bindestrich wird ein Bereich angegeben:
cut -c 2-6 results.txt
Das Ergebnis enthält die Zeichen an den Positionen 2 bis einschließlich 6.
Bereiche können auch am Anfang oder Ende offen sein:
cut -c -4 results.txt
cut -c 5- results.txt
-4bedeutet: vom Zeilenanfang bis einschließlich Position 4.5-bedeutet: ab Position 5 bis zum Zeilenende.
Auswahllisten und Bereiche
| Notation | Bedeutung | Beispiel | Ausgewählte Positionen oder Felder |
|---|---|---|---|
N | Eine einzelne Position | 3 | Position 3 |
N,M | Mehrere einzelne Positionen | 1,4 | Positionen 1 und 4 |
N-M | Geschlossener Bereich | 2-5 | Positionen 2, 3, 4 und 5 |
-M | Vom Anfang bis M | -4 | Positionen 1 bis 4 |
N- | Ab N bis zum Ende | 5- | Position 5 bis zum Zeilenende |
Felder mit -f auswählen
Ein Feld ist ein Abschnitt einer Zeile zwischen zwei Trennzeichen. Die Option -f wählt Feldnummern aus. Auch bei Feldern beginnt die Zählung bei 1.
Ohne weitere Angabe verwendet cut den Tabulator als Feldtrennzeichen. Eine tabulatorgetrennte Datei wird häufig als TSV-Datei bezeichnet:
cut -f 1,3 daten.tsv
Der Befehl gibt aus jeder Zeile das erste und dritte Feld aus. Bei mehreren ausgewählten Feldern wird das Feldtrennzeichen zwischen den Ausgabefeldern beibehalten. Bei einer TSV-Datei sind das also Tabulatoren.
Einzelne Felder, Listen und Bereiche funktionieren analog zu Zeichenpositionen:
cut -f 2 daten.tsv
cut -f 1,3 daten.tsv
cut -f 2-4 daten.tsv
cut -f -3 daten.tsv
cut -f 4- daten.tsv
Benutzerdefinierte Trennzeichen mit -d
Mit -d wird ein anderes Trennzeichen festgelegt. Die Option erwartet genau ein einzelnes Zeichen und wird normalerweise zusammen mit -f verwendet.
Kolongetrennte Dateien
Die Datei /etc/passwd enthält mehrere durch Doppelpunkte getrennte Felder. Mit folgendem Befehl werden der Benutzername und die Login-Shell ausgegeben:
cut -d ':' -f 1,7 /etc/passwd
Das erste Feld ist typischerweise der Benutzername. Das siebte Feld enthält die Login-Shell, beispielsweise /bin/bash. Die genaue Feldbedeutung folgt dem Format der jeweiligen Datei.
Komma, Semikolon und Schrägstrich
Für einfache, einzeichengetrennte Daten können typische Separatoren angegeben werden:
cut -d ',' -f 2 daten.txt
cut -d ';' -f 1,3 daten.txt
cut -d '/' -f 3 results.txt
Bei einer Datei mit Zeilen im Muster bereich/gruppe/wert gibt der letzte Befehl das dritte Feld aus:
bereich/gruppe/wert
alpha/team42/aktiv
Die Ausgabe lautet:
wert
aktiv
Zeilen ohne Trennzeichen
Bei der Feldauswahl behandelt cut eine Zeile ohne das erwartete Trennzeichen standardmäßig als Zeile ohne Feldaufteilung und gibt sie unverändert aus. Das kann bei uneinheitlichen oder fehlerhaften Eingabedaten überraschend sein.
Mit -s werden solche Zeilen unterdrückt:
cut -d ';' -f 2 -s daten.txt
Dieser Befehl gibt nur das zweite Feld von Zeilen aus, die tatsächlich ein Semikolon enthalten. Ob -s sinnvoll ist, hängt vom Ziel ab: Für eine strenge Datenprüfung ist das Weglassen unvollständiger Zeilen oft hilfreich; für eine Untersuchung aller Eingabezeilen kann das Standardverhalten besser sein.
Praxisbeispiele mit Linux-Dateien und Pipes
Ausgewählte Spalten einer TSV-Datei weiterverarbeiten
Bei tabulatorgetrennten Daten kann cut zuerst relevante Spalten auswählen. Danach können weitere Befehle die Werte sortieren oder zählen:
cut -f 2 daten.tsv | sort | uniq
sort ordnet die Werte, und uniq entfernt direkt aufeinanderfolgende Duplikate. Für eine vollständige Häufigkeitsauswertung wird meist vorher sortiert.
Zeilen filtern und anschließend ein Feld auswählen
grep 'status=ok' protokoll.txt | cut -d ' ' -f 1
Hier filtert grep zunächst Zeilen. Danach nimmt cut das erste Feld, wobei ein einzelnes Leerzeichen als Trennzeichen angenommen wird. Bei variabler Anzahl von Leerzeichen ist diese Methode häufig nicht ausreichend.
Feldbereiche aus Pfadangaben
Für einfache schrägstrichgetrennte Angaben kann ein bestimmter Abschnitt extrahiert werden:
cut -d '/' -f 3 pfade.txt
Beachte, dass ein Pfad wie /var/log/system.log mit einem führenden Schrägstrich beginnt. Dadurch kann das erste Feld leer sein. Die Feldnummern müssen zur tatsächlichen Struktur der Zeile passen.
Wann ist cut geeignet?
| Datenform | Geeignetes Vorgehen | Begründung oder Einschränkung |
|---|---|---|
| Feste Zeichenpositionen | cut -c | Geeignet, wenn jede Zeile gleich aufgebaut ist |
| Tabulatorgetrennte Daten | cut -f | Der Tabulator ist das Standardtrennzeichen |
| Einfach einzeichengetrennte Daten | cut -d ZEICHEN -f | Geeignet, wenn das Format keine komplexen Regeln benötigt |
| CSV mit Anführungszeichen | CSV-fähiges Werkzeug | cut kennt keine Quoting-Regeln oder eingebetteten Kommas |
| JSON oder verschachtelte Daten | JSON-Werkzeug oder spezieller Parser | Die Struktur ist nicht zuverlässig mit einfachen Feldern abbildbar |
Zeichenpositionen, Bytes und Mehrbyte-Zeichen
-c wählt Zeichenpositionen aus, während -b Bytepositionen auswählt:
cut -c 1-4 datei.txt
cut -b 1-4 datei.txt
Ein Byte ist eine Einheit der zugrunde liegenden Kodierung. In UTF-8 können Zeichen wie Umlaute oder viele andere Unicode-Zeichen aus mehreren Bytes bestehen. Deshalb können Bytepositionen und Zeichenpositionen voneinander abweichen.
Bei ASCII-Text fallen beide Sichtweisen meist zusammen. Bei Mehrbyte-Zeichen solltest du die Kodierung und die Locale-Einstellung prüfen. Wenn die Verarbeitung Unicode-sensitiv sein muss, ist ein Werkzeug mit klarer Unterstützung für die gewünschte Zeichenkodierung oft besser geeignet.
Wichtige Einschränkungen
-dist für ein einzelnes Zeichen vorgesehen. Mehrzeichenige Separatoren oder reguläre Ausdrücke können damit nicht direkt beschrieben werden.- Mehrere Leerzeichen werden nicht automatisch zu einem Separator zusammengefasst.
cut -d ' 'behandelt jedes einzelne Leerzeichen als Trennzeichen. - CSV-Regeln wie Anführungszeichen, Kommas innerhalb eines Feldes oder maskierte Anführungszeichen werden nicht ausgewertet.
- Für reguläre Ausdrücke, variable Leerraumtrennung und komplexere Feldlogik ist
awkmeist passender. sedeignet sich für textbasierte Transformationen, spezialisierte CSV-Werkzeuge für korrektes CSV und JSON-Werkzeuge für verschachtelte Daten.
Fehlerbehebung
Die erwartete Spalte erscheint nicht
Prüfe zunächst das tatsächliche Trennzeichen. Eine Datei kann statt Tabulatoren auch Leerzeichen, Kommas, Semikolons oder ein anderes Zeichen enthalten. Bei einem einzelnen Separator setzt du -d passend:
cut -d ';' -f 2 daten.txt
Unsichtbare Tabulatoren und Leerzeichen lassen sich beispielsweise mit geeigneten Anzeigeoptionen von Textwerkzeugen untersuchen.
Mehrere Leerzeichen führen zu verschobenen Ergebnissen
cut fasst wiederholte Leerzeichen nicht automatisch zusammen. Bei variabler Whitespace-Trennung ist awk in der Regel geeigneter, weil es solche Zwischenräume flexibler behandeln kann.
Zeilen ohne Separator werden ausgegeben
Das ist das Standardverhalten bei der Feldauswahl. Verwende -s, wenn Zeilen ohne das erwartete Trennzeichen ausgeschlossen werden sollen:
cut -d ':' -f 1 -s datei.txt
Umlaute werden unerwartet ausgewählt
Die Ursache kann ein Unterschied zwischen Byte- und Zeichenbehandlung, eine ungeeignete Locale oder eine andere Dateikodierung sein. Prüfe die Kodierung und die Locale. Für Unicode-sensitive Verarbeitung solltest du ein dafür geeignetes Werkzeug einsetzen.
CSV wird falsch zerlegt
Bei CSV-Daten mit Anführungszeichen interpretiert cut jedes Komma als Feldgrenze. Ein Wert wie "Berlin, Deutschland" enthält jedoch ein Komma innerhalb eines Feldes. Verwende dafür einen CSV-Parser oder ein CSV-fähiges Kommandozeilenwerkzeug.
Fehlende oder ungültige Listenangabe
Eine Auswahloption und eine gültige Liste sind erforderlich. Beispiele für gültige Listen sind 3, 1,4, 2-5, -4 und 5-. Bei abweichendem Verhalten hilft die lokale Manpage mit man cut.
Prüfungsrelevante Merksätze
cutwählt Teile jeder Eingabezeile aus und verändert die Quelldatei nicht.-csteht für Zeichenpositionen,-bfür Bytepositionen und-ffür Felder.- Positionen und Felder werden ab 1 gezählt.
- Das Standardtrennzeichen bei
-fist der Tabulator. -dlegt genau ein Feldtrennzeichen fest und wird normalerweise mit-fkombiniert.-sunterdrückt Zeilen ohne das angegebene Trennzeichen.- Für komplexe CSV-, JSON- oder reguläre Ausdruckslogik ist
cutnicht das richtige Werkzeug.
Kurzreferenz
cut -c 3 results.txt
cut -c 1,3,5 results.txt
cut -c 2-6 results.txt
cut -c -4 results.txt
cut -c 5- results.txt
cut -f 1,3 daten.tsv
cut -d ':' -f 1,7 /etc/passwd
cut -d '/' -f 3 results.txt
cut -d ';' -f 2 -s daten.txt
Wenn du nur feste Zeichenpositionen oder einfache, einzeichengetrennte Felder aus zeilenbasierten Daten benötigst, ist cut ein schnelles und übersichtliches Werkzeug. Für weitergehende Verarbeitung kannst du es über eine Pipe mit anderen Linux-Befehlen kombinieren.