cut
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Der Befehl cut extrahiert spaltenweise Ausschnitte aus Textzeilen. So können bspw. aus einer Logdatei irrelevante Informationen entfernt oder CSV-Dateien bearbeitet werden.
Installation¶
Das Programm ist im Paket
coreutils
von Ubuntu enthalten und deshalb auf jedem System vorinstalliert.
Aufruf¶
Die allgemeine Syntax lautet [1]:
cut OPTION DATEI
cut
kennt folgende Optionen:
Optionen von cut | |
Option | Beschreibung |
-b oder --bytes | Angabe der Bytepositionen |
-c oder --characters | Angabe der Zeichenpositionen (entspricht derzeit -b ) |
-d oder --delimiter | Angabe des Trennzeichens (Delimiter) anstelle des Tabulators (Standard) |
-f oder --fields | Angabe der zu extrahierenden Felder |
-s oder --only-delimited | Keine Ausgabe von Zeilen ohne Trennzeichen (Delimiter) |
b
, c
oder f
können nicht gemeinsam verwendet werden. Weitere Optionen sind der Manpage zu entnehmen.
Beispiele¶
In der Datei /etc/passwd stehen die Benutzernamen in der ersten Spalte. Diese Datei enthält jedoch auch weitere Informationen:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh …
Der folgende Befehl führt dazu, dass nur die Benutzernamen ausgegeben werden:
cut -d: -f1 /etc/passwd
root daemon bin …
-d:
beschreibt dabei das Zeichen, das die Felder trennt. Im Beispiel ist das der Doppelpunkt. -f1
zeigt an, dass nur das erste Feld ausgegeben werden soll, in diesem Fall der Benutzername. Auch mehrere, getrennte Felder können angezeigt werden:
cut -d: -f1,7 /etc/passwd
root:/bin/bash daemon:/bin/sh bin:/bin/sh …
Der folgende Befehl zeigt mehrere Spalten einer Ausgabe an, deren Felder durch Leerzeichen getrennt sind. Konkret werden dabei Betriebssystem und Kernelversion aus der Ausgabe des Befehls uname -a
extrahiert:
uname -a
Linux nutzer-laptop 3.2.0-030200-generic #201201042035 SMP Thu Jan 5 01:36:31 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
uname -a | cut -d" " -f1,3,12
Linux 3.2.0-030200-generic x86_64
Beim folgenden Beispiel sind die einzelnen Spalten nicht durch Tabulatoren, sondern durch mehrere Leerzeichen getrennt. Die aufeinander folgenden Leerzeichen werden durch das Programm tr in ein einzelnes umgewandelt. Konkret wird die prozentuale Belegung des Homeverzeichnis aus der Ausgabe des Befehls df extrahiert.
Sieht die Ausgabe von
df /home
z.B. so aus:
Dateisystem 1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf /dev/sdc1 1922728752 653507768 1171528928 36% /home
dann liefert die Befehlsfolge
df /home | grep home| tr -s ' '| cut -d ' ' -f 5
als Ausgabe:
36%
Absolute Positionsangaben können ebenfalls verwendet werden. Im folgenden Beispiel werden aus der Liste aller laufenden Prozesse die PIDs augeschnitten. Diese stehen in den Spalten 9 bis 14:
ps huax | cut -c 9-14
Positionsangaben müssen nicht durch vorbestimmte Endpunkte bestimmt sein:
echo "123456789" | cut -c 5-
56789
Durch eine Kombination von Befehlen kann cut
auf jedes Zeichen einer Datei zugreifen. Mit dem folgenden Befehl wird das dritte Wort der 6. Zeile der Datei datei.txt extrahiert. Es werden dabei zunächst mit head
die ersten 6 Zeilen ausgeschnitten, dann mit tail
die letzte dieser verbleibenden Zeilen und schließlich mit cut
deren drittes Wort:
cat datei.txt | head -6l | tail -1l | cut -d" " -f3
Bekannte Probleme¶
Bei den Optionen -b
und -c
gibt es Probleme im Zusammenspiel mit Sonderzeichen wegen fehlender Unterstützung für UTF-8 und andere Multi-Byte bzw. Unicode-Varianten in coreutils.
echo "problem" | cut -c4-7
blem
echo "pröbläm" | cut -c4-7
�bl�
Problembehebung¶
Cut
stößt an seine Grenzen, wenn mehr als ein Zeichen als Trenner zu verarbeiten ist. Ist es das gleiche Zeichen, nur doppelt, ergibt sich eine ungewöhnliche Zählweise der Felder (1, 3, 5, …), weil das Feld zwischen dem ersten und zweiten Trennzeichen extra gezählt wird.
apt-config dump | grep Size
APT::Archives::MaxSize "500";
apt-config dump | grep Size | cut -d':' -f3
Archives
Die Kombination von zwei unterschiedlichen Zeichen als Trenner ist mit mehrmaligen Anwenden von cut
zu lösen. In dem Fall kann alternativ auch der Einsatz von awk in Betracht gezogen werden.
Links¶
choose - Alternative zu cut
Unix-Texttools 🇩🇪 – Online-Anleitung
Shell/Befehlsübersicht Übersicht über verschiedene Shell-Befehle