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.tsvcut -f <n> -d '<delim>' <file> — Extrahiert das n-te Feld mit einem eigenen Trennzeichen.
cut -f 1 -d ',' users.csvcut -f <n>,<m> -d '<delim>' <file> — Extrahiert mehrere bestimmte Felder.
cut -f 1,3 -d ':' /etc/passwdcut -f <n>-<m> -d '<delim>' <file> — Extrahiert einen Feldbereich.
cut -f 2-4 -d ',' data.csvcut -f <n>- -d '<delim>' <file> — Extrahiert ab Feld n bis zum Ende.
cut -f 3- -d ':' /etc/passwdcut -f -<n> -d '<delim>' <file> — Extrahiert vom ersten Feld bis Feld n.
cut -f -3 -d ',' data.csvcut -f <n> -d '<delim>' -s <file> — Unterdrückt Zeilen, die das Trennzeichen nicht enthalten.
cut -f 2 -d ',' -s mixed.txtcut -f <n> -d '<delim>' --output-delimiter='<sep>' — Verwendet ein anderes Trennzeichen für die Ausgabe.
cut -f 1,3 -d ':' --output-delimiter=' | ' /etc/passwdZeichenextraktion
cut -c <n> <file> — Extrahiert das n-te Zeichen jeder Zeile.
cut -c 1 file.txtcut -c <n>-<m> <file> — Extrahiert einen Zeichenbereich.
cut -c 1-10 file.txtcut -c <n>,<m>,<o> <file> — Extrahiert bestimmte Zeichenpositionen.
cut -c 1,5,10 file.txtcut -c <n>- <file> — Extrahiert ab Zeichen n bis zum Zeilenende.
cut -c 5- file.txtcut -c -<n> <file> — Extrahiert die ersten n Zeichen jeder Zeile.
cut -c -20 file.txtByte-Extraktion
cut -b <n> <file> — Extrahiert das n-te Byte jeder Zeile.
cut -b 1 file.txtcut -b <n>-<m> <file> — Extrahiert einen Byte-Bereich (praktisch für Binärdaten mit fester Breite).
cut -b 1-16 binary.datcut -b <n>- <file> — Extrahiert ab Byte n bis zum Ende.
cut -b 5- data.binKomplement
cut --complement -f <n> -d '<delim>' <file> — Extrahiert alle Felder AUSSER den angegebenen.
cut --complement -f 2 -d ',' data.csvcut --complement -c <n>-<m> <file> — Entfernt einen Zeichenbereich und behält den Rest.
cut --complement -c 1-5 file.txtTypische Anwendungsfälle
cut -f 1 -d ':' /etc/passwd — Extrahiert alle Benutzernamen aus /etc/passwd.
cut -f 1 -d ':' /etc/passwdecho $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 -nps 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-52rev <file> | cut -f 1 -d '.' | rev — Extrahiert Dateiendungen durch Umkehren, Schneiden und erneutes Umkehren.
ls | rev | cut -f 1 -d '.' | revhead -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.
Weiterführende Links
- GNU coreutils: cut – offizielle Referenz zu allen Optionen (englisch)
- ubuntuusers-Wiki: Datenstromtools – deutschsprachige Übersicht zu cut, awk, sed und Co.