Der Befehl cut wird in Linux- und Unix-Systemen verwendet, um Teile und Abschnitte aus jeder Zeile einer Datei auszuschneiden und das Ergebnis auf die Standardausgabe zu schreiben. Es kann verwendet werden, um Teile einer Zeile nach Byte-Position, Zeichen und Feld (Trennzeichen) abzuschneiden.
In diesem Tutorial lernen wir den Linux-Cut-Befehl mit einigen praktischen Beispielen kennen, die Sie in Ihren täglichen Befehlszeilenaktivitäten verwenden können.
Cut-Befehl und -Syntax
Die grundlegende Syntax für den Schnittbefehl lautet wie folgt:
cut OPTION... [FILE]...
Lassen Sie uns die Schnittoptionen überprüfen und ohne eine Option funktioniert der Schnittbefehl nicht.
Schnittoptionen
-f
:Extrahieren durch Angabe eines Feldes. Der Ausschneidebefehl verwendet 'TAB' als Standard-Feldtrennzeichen.
-d
:'Tabulator' ist das Standardtrennzeichen und mit dieser Option können Sie spezifische Trennzeichen verwenden.
-b
:Zum Extrahieren durch Angabe eines Bytes. Der Byte-Bereich kann ebenfalls angegeben werden.
-c
:Um nach Zeichen zu schneiden. Dies kann eine durch Kommas getrennte Liste von Zahlen oder ein durch einen Bindestrich (-) getrennter Zahlenbereich sein.
–complement
:Dies ergänzt die Auswahl
–output-delimiter
:Um das Ausgabetrennzeichen zu ändern, verwenden Sie die Option -output-delimiter='delimiter'.
--only-delimited
:Ausschneiden druckt keine Zeilen ohne Trennzeichen
Wir werden die folgende Textdatei mit dem Namen „content.txt“ und die Datei /etc/passwd in diesem Tutorial verwenden, um unsere Beispiele zu veranschaulichen.
$ cat content.txt
Ubuntu Linux
Microsoft Windows
OsX El Capitan
Unix
FreeBSD
Wie man durch Trennzeichen schneidet
Die am häufigsten verwendete Schnittoption ist eine Kombination aus -d
und -f
. Inhalt wird im Wesentlichen basierend auf bestimmten Trennzeichen und aufgelisteten Feldern extrahiert.
Im Folgenden wird beispielsweise nur das erste Feld jeder Zeile aus der Datei „/etc/passwd“ unter Verwendung des Trennzeichens (:) gedruckt.
$ cut -d':' -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...
Das folgende Beispiel, in dem wir Leerzeichen (" ") als Trennzeichen verwenden und das erste Feld aus der Datei mit dem Namen "content.txt" ausschneiden.
$ cut -d " " -f 1 content.txt
Ubuntu
Microsoft
OsX
Unix
FreeBSD
Dieses Beispiel extrahiert mehr als ein Feld aus einer bestimmten Datei. Hier extrahieren wir das 1. und 6. Feld mit dem Trennzeichen Doppelpunkt (:) aus der Datei „/etc/passwd“, die die Zeichenfolge „/bin/bash“ enthält:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
root:/root
slax:/home/slax
Um den Bereich der Felder anzuzeigen, geben Sie das Startfeld und das Endfeld getrennt durch einen Bindestrich (-) wie unten gezeigt an:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
root:x:0:0:/root:/bin/bash
slax:x:1000:1000:/home/slax:/bin/bash
So ergänzen Sie die Ausgabeauswahl
Um die Auswahlfeldliste zu ergänzen, verwenden Sie --complement
Möglichkeit. Diese Option wurde verwendet, um alle Felder außer den angegebenen Feldern auszuwählen.
Im folgenden Beispiel druckt der Befehl alle Felder außer dem 2. Feld in der Datei from '/etc/passwd':
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2
root:0:0:root:/root:/bin/bash
So geben Sie ein Ausgabetrennzeichen an
Um das Ausgabetrennzeichen anzugeben, verwenden Sie --output-delimiter
Möglichkeit. Eingabebegrenzer wird durch -d
angegeben Option und standardmäßig ist das Ausgabetrennzeichen dasselbe wie das Eingabetrennzeichen.
Lassen Sie uns zunächst die Ausgabe ohne Ausgabebegrenzer wie folgt überprüfen:
$ cut -d: -f1,7 /etc/passwd | sort | uniq -u
_apt:/usr/sbin/nologin
backup:/usr/sbin/nologin
bin:/usr/sbin/nologin
daemon:/usr/sbin/nologin
dnsmasq:/usr/sbin/nologin
games:/usr/sbin/nologin
gnats:/usr/sbin/nologin
irc:/usr/sbin/nologin
landscape:/usr/sbin/nologin
list:/usr/sbin/nologin
lp:/usr/sbin/nologin
lxd:/bin/false
Jetzt habe ich --output-delimiter
hinzugefügt Option und Eingabetrennzeichen Doppelpunkt (:) wird wie folgt durch das Ausgabetrennzeichen 'SPACE' ersetzt:
$ cut -d: -f1,7 --output-delimiter ' ' /etc/passwd | sort | uniq -u
_apt /usr/sbin/nologin
backup /usr/sbin/nologin
bin /usr/sbin/nologin
daemon /usr/sbin/nologin
dnsmasq /usr/sbin/nologin
games /usr/sbin/nologin
gnats /usr/sbin/nologin
irc /usr/sbin/nologin
landscape /usr/sbin/nologin
list /usr/sbin/nologin
lp /usr/sbin/nologin
lxd /bin/false
Schauen wir uns ein weiteres Beispiel an, hier verwenden wir Ausgabetrennzeichen, um jedes Feld in einer neuen Zeile zu drucken.
Hier verwenden wir --output-delimiter
als $’\n’
was eine neue Zeile anzeigt.
Überprüfen Sie die Ausgabe:
$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=
Wie man nach Zeichen schneidet
Das -c
Die Option (Spalte) wird zum Schneiden nach Zeichenposition verwendet. Denken Sie daran, dass 'TABS' und 'Leerzeichen' auch als Zeichen behandelt werden.
Um das erste Zeichen jeder Zeile aus der Datei namens content.txt zu drucken, verwenden Sie unten:
$ cut -c 1 content.txt
U
M
O
U
F
Im folgenden Beispiel zeigen wir die Zeichen 1 bis 7 (Bereich) jeder Zeile aus der Datei an:
$ cut -c 1-7 content.txt
Ubuntu
Microso
OsX El
Unix
FreeBSD
Sehen wir uns an, wie man Spalten nach einer bestimmten Start- oder Endposition auswählt.
So extrahieren Sie Spalten vom 2. Zeichen bis zum letzten Zeichen:
$ cut -c2- content.txt
buntu Linux
icrosoft Windows
sX El Capitan
nix
reeBSD
So extrahieren Sie Spalten vom 1. bis zum 4. Zeichen:
cut -c-4 content.txt
Ubun
Micr
OsX
Unix
Free
Wie man byteweise schneidet
Verwenden Sie das -b
Option zum Auswählen eines Teils einer Zeile durch Angabe einer Byte-Position durch durch Komma (,) getrennte Zahlen. Mit Bindestrich können Sie einen Bereich von Bytes angeben.
Das folgende Beispiel schneidet das 1., 2. und 3. Byte aus der Datei mit dem Namen „content.txt“ aus:
$ cut -b 1,2,3 content.txt
Ubu
Mic
OsX
Uni
Fre
Wir können auch mit Bereichen auflisten, indem wir den folgenden Befehl verwenden:
$ cut -b 1-3,5-7 content.txt
Ubutu
Micoso
OsXEl
Uni
FreBSD
Einige praktische Schnittbeispiele
Cut wird am praktischsten mit einer Kombination verschiedener Linux- oder Unix-Befehle verwendet.
Sie möchten beispielsweise „USER“, „PID“ und „COMMAND“ mit dem ps-Befehl extrahieren:
ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
USER PID COMMAND
0 676 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220
0 681 /sbin/agetty -o -p -- \u --noclear tty1 linux
0 23174 -bash
0 26737 ps -L u n
0 26738 tr -s
0 26739 cut -d -f 2,3,14-
Nehmen wir ein weiteres Beispiel, um den Wert „Gesamt“, „Verwendet“ und „Frei“ des Speichers zu extrahieren und mit mehreren Befehlen in einer Textdatei zu speichern:
$ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
Output
$ cat memory.txt
985 86 234
Schlussfolgerung
Der Cut-Befehl kann mit vielen anderen Linux- oder Unix-Befehlen geleitet werden. Es kann mit einem oder mehreren Filtern für zusätzliche Textverarbeitung geleitet werden.
Eine der Einschränkungen des cut-Befehls besteht darin, dass er die Angabe von mehr als einem Zeichen als Trennzeichen nicht unterstützt. Mehrere Leerzeichen werden als Trennzeichen für mehrere Felder gezählt und müssen vor dem Ausschneiden den Befehl tr verwenden, um die gewünschte Ausgabe zu erhalten.
\n' root /root /bin/bash operator /root /sbin/nologin
Wie man nach Zeichen schneidet
Das -c
Die Option (Spalte) wird zum Schneiden nach Zeichenposition verwendet. Denken Sie daran, dass 'TABS' und 'Leerzeichen' auch als Zeichen behandelt werden.
Um das erste Zeichen jeder Zeile aus der Datei namens content.txt zu drucken, verwenden Sie unten:
Im folgenden Beispiel zeigen wir die Zeichen 1 bis 7 (Bereich) jeder Zeile aus der Datei an:
Sehen wir uns an, wie man Spalten nach einer bestimmten Start- oder Endposition auswählt.
So extrahieren Sie Spalten vom 2. Zeichen bis zum letzten Zeichen:
So extrahieren Sie Spalten vom 1. bis zum 4. Zeichen:
Wie man byteweise schneidet
Verwenden Sie das -b
Option zum Auswählen eines Teils einer Zeile durch Angabe einer Byte-Position durch durch Komma (,) getrennte Zahlen. Mit Bindestrich können Sie einen Bereich von Bytes angeben.
Das folgende Beispiel schneidet das 1., 2. und 3. Byte aus der Datei mit dem Namen „content.txt“ aus:
Wir können auch mit Bereichen auflisten, indem wir den folgenden Befehl verwenden:
Einige praktische Schnittbeispiele
Cut wird am praktischsten mit einer Kombination verschiedener Linux- oder Unix-Befehle verwendet.
Sie möchten beispielsweise „USER“, „PID“ und „COMMAND“ mit dem ps-Befehl extrahieren:
Nehmen wir ein weiteres Beispiel, um den Wert „Gesamt“, „Verwendet“ und „Frei“ des Speichers zu extrahieren und mit mehreren Befehlen in einer Textdatei zu speichern:
Schlussfolgerung
Der Cut-Befehl kann mit vielen anderen Linux- oder Unix-Befehlen geleitet werden. Es kann mit einem oder mehreren Filtern für zusätzliche Textverarbeitung geleitet werden.
Eine der Einschränkungen des cut-Befehls besteht darin, dass er die Angabe von mehr als einem Zeichen als Trennzeichen nicht unterstützt. Mehrere Leerzeichen werden als Trennzeichen für mehrere Felder gezählt und müssen vor dem Ausschneiden den Befehl tr verwenden, um die gewünschte Ausgabe zu erhalten.