cut — Felder, Zeichen und Bytes aus Textzeilen ausschneiden

Praxis-Guide zu cut — gezielt Felder, Zeichen oder Byte-Bereiche aus Textdateien und Pipe-Ausgaben extrahieren, mit Trennzeichen, Bereichen und Komplement.

cut ist das schlanke Werkzeug, um aus jeder Zeile genau die Spalte herauszuschneiden, die du brauchst – sei es ein Feld in einer CSV-Datei, ein Zeichenbereich in einer Logzeile oder ein Byte-Offset in Festbreiten-Daten. Du gibst an, ob du nach Feldern (-f), Zeichen (-c) oder Bytes (-b) schneidest, und cut liefert dir den Rest zeilenweise zurück. Standardmäßig trennt cut Felder am Tabulator; mit -d legst du ein eigenes Trennzeichen fest. In Pipelines ist cut oft die schnellste Antwort, wenn awk zu viel des Guten wäre.

Feldextraktion

cut -f <n> <file> — Extrahiert das n-te Feld (standardmäßig Tab-getrennt).

cut -f 2 data.tsv

cut -f <n> -d '<delim>' <file> — Extrahiert das n-te Feld mit einem eigenen Trennzeichen.

cut -f 1 -d ',' users.csv

cut -f <n>,<m> -d '<delim>' <file> — Extrahiert mehrere bestimmte Felder.

cut -f 1,3 -d ':' /etc/passwd

cut -f <n>-<m> -d '<delim>' <file> — Extrahiert einen Feldbereich.

cut -f 2-4 -d ',' data.csv

cut -f <n>- -d '<delim>' <file> — Extrahiert ab Feld n bis zum Ende.

cut -f 3- -d ':' /etc/passwd

cut -f -<n> -d '<delim>' <file> — Extrahiert vom ersten Feld bis Feld n.

cut -f -3 -d ',' data.csv

cut -f <n> -d '<delim>' -s <file> — Unterdrückt Zeilen, die das Trennzeichen nicht enthalten.

cut -f 2 -d ',' -s mixed.txt

cut -f <n> -d '<delim>' --output-delimiter='<sep>' — Verwendet ein anderes Trennzeichen für die Ausgabe.

cut -f 1,3 -d ':' --output-delimiter=' | ' /etc/passwd

Zeichenextraktion

cut -c <n> <file> — Extrahiert das n-te Zeichen jeder Zeile.

cut -c 1 file.txt

cut -c <n>-<m> <file> — Extrahiert einen Zeichenbereich.

cut -c 1-10 file.txt

cut -c <n>,<m>,<o> <file> — Extrahiert bestimmte Zeichenpositionen.

cut -c 1,5,10 file.txt

cut -c <n>- <file> — Extrahiert ab Zeichen n bis zum Zeilenende.

cut -c 5- file.txt

cut -c -<n> <file> — Extrahiert die ersten n Zeichen jeder Zeile.

cut -c -20 file.txt

Byte-Extraktion

cut -b <n> <file> — Extrahiert das n-te Byte jeder Zeile.

cut -b 1 file.txt

cut -b <n>-<m> <file> — Extrahiert einen Byte-Bereich (praktisch für Binärdaten mit fester Breite).

cut -b 1-16 binary.dat

cut -b <n>- <file> — Extrahiert ab Byte n bis zum Ende.

cut -b 5- data.bin

Komplement

cut --complement -f <n> -d '<delim>' <file> — Extrahiert alle Felder AUSSER den angegebenen.

cut --complement -f 2 -d ',' data.csv

cut --complement -c <n>-<m> <file> — Entfernt einen Zeichenbereich und behält den Rest.

cut --complement -c 1-5 file.txt

Typische Anwendungsfälle

cut -f 1 -d ':' /etc/passwd — Extrahiert alle Benutzernamen aus /etc/passwd.

cut -f 1 -d ':' /etc/passwd

echo $PATH | cut -f 1 -d ':' — Holt das erste Verzeichnis aus der PATH-Variable.

echo $PATH | cut -f 1 -d ':'

cut -f 1,3 -d ':' /etc/passwd | sort — Extrahiert Benutzername und UID und sortiert danach.

cut -f 1,3 -d ':' /etc/passwd | sort -t ':' -k 2 -n

ps aux | cut -c 1-80 — Kürzt die Prozessliste auf 80 Zeichen Breite.

ps aux | cut -c 1-80

<command> | cut -f <n> -d ' ' — Extrahiert eine Spalte aus leerzeichengetrennter Befehlsausgabe.

df -h | cut -c 1-20,45-52

rev <file> | cut -f 1 -d '.' | rev — Extrahiert Dateiendungen durch Umkehren, Schneiden und erneutes Umkehren.

ls | rev | cut -f 1 -d '.' | rev

head -1 data.csv | cut -f 1- -d ',' --output-delimiter=$'\n' — Listet CSV-Spaltenüberschriften, eine pro Zeile.

head -1 data.csv | cut -f 1- -d ',' --output-delimiter=$'\n'

Fazit

cut glänzt durch Einfachheit: Wenn deine Daten ein klares, gleichbleibendes Trennzeichen haben, holst du die gewünschte Spalte schneller und lesbarer heraus als mit jedem anderen Werkzeug. Beachte aber die Grenzen – cut kennt nur ein einzelnes Trennzeichen (keine wiederholten Leerzeichen wie bei awk) und kann Felder nicht umordnen. Für mehrere aufeinanderfolgende Leerzeichen quetschst du sie zuvor mit tr -s ' ' zusammen; sobald Logik, Bedingungen oder variable Trennung ins Spiel kommen, ist awk die bessere Wahl. Bei Multibyte-Zeichen (UTF-8) unterscheiden sich -c und -b – schneide dann nach Zeichen, nicht nach Bytes.

Verwandte Kommandos

  • awk – mächtige Textverarbeitung mit Feldern, Bedingungen und Berechnungen
  • paste – Zeilen mehrerer Dateien spaltenweise zusammenführen
  • column – Eingaben in saubere, ausgerichtete Spalten und Tabellen formatieren