$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers
Der -d ' ' sagt cut auf Leerzeichen aufteilen. -f 3 wählt die dritte Spalte aus.
Sie können auch awk verwenden , der die Aufteilung bereits nach Leerzeichen durchführt und die Spalten als $1 verfügbar macht , $2 , …
$ echo "Watermelons and cucumbers" | awk '{ print $3 }'
cucumbers
Ich würde wahrscheinlich eine der bereits von @slhck gegebenen Optionen verwenden, aber hier sind ein paar weitere Möglichkeiten, dies zu tun:
-
Verwendung von Arrays, wie Sie es in jeder anderen Sprache tun würden:
$ foo=( $(SayStuff) ) $ echo ${foo[2]} cucumbersDie
var=()deklariert ein Array,$(command)speichert die Ausgabe des Befehls. Alsofoo=( $(SayStuff) )speichert die Ausgabe vonSayStuffin das Arrayfoound Sie dannechoes ist das dritte Element mit${foo[2]}. -
sed$ SayStuff | sed 's/.* \(.*\)/\1/' cucumbersDie
sedBefehl ersetzt (s///) alles mit dem letzten Wort. Die Regex passt alles bis auf ein Leerzeichen (.*), der alles bis zum letzten Leerzeichen abgleicht und dann das letzte Wort(\(.*\)erfasst . Da das Wort erfasst wurde, können wir es als\1bezeichnen .Eine einfachere Version:
$ SayStuff | sed 's/.* //' cucumbers -
bash
$ foo=$(SayStuff); echo ${foo##* } cucumbersDies nutzt die String-Manipulationsfähigkeiten von Bash, siehe hier für weitere Details.
-
Mehr Bash
$ SayStuff | while read a b c; do echo $c; done cucumbers -
Perl, wo es natürlich viele Möglichkeiten gibt, dies zu tun:
$ SayStuff | perl -lane 'print $F[$#F]' cucumberDie
-amachtperlverhalten sich wieawk, Zeilen an Leerzeichen aufteilen und in das Array@Fspeichern . Wir drucken dann das letzte Element von@F($#Fist die Anzahl der Elemente in@F). Die-lweist Perl an, jedemprinteinen Zeilenumbruch hinzuzufügen -Anweisung, die-ndass es STDIN zeilenweise verarbeiten soll und-edass es das auf der Kommandozeile angegebene Skript ausführen soll.$ SayStuff | perl -pe 's/.* //' cucumberDie Optionen wurden oben erklärt, wir löschen einfach alles bis zum letzten Leerzeichen und drucken (
-p).$ perl -le 'print $ARGV[$#ARGV]' $(SayStuff) cucumbersHier übergeben wir
Watermelons and cucumbersals Argumente, die Perl im@ARGspeichert array und so drucken wir das letzte Element von@ARG. -
Trickserei. Dieser verwendet
sedum Leerzeichen in Zeilenumbrüche umzuwandeln und danntailum nur die letzte Zeile zu drucken.$ SayStuff | sed 's/ /\n/g' | tail -n 1 cucumbers -
grep und reguläre Ausdrücke mit
-odie nur die passende Zeichenfolge ausgibt.$ SayStuff | grep -Po '\w+$' cucumbers -
Betrug
$ SayStuff | grep -o cucumbers cucumbers
Hier ist eine weitere Erklärung:
Usage: cut OPTION... [FILE]...
Print selected parts of lines from each FILE to standard output.
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-f, --fields=LIST
select only these fields; also print any line that contains no
delimiter character, unless the -s option is specified
Wenn Sie also das 3. Feld benötigen und es durch Leerzeichen ' ' getrennt ist, dann ist es
$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers
Wenn Sie das LETZTE wollen Feld sollten Sie wahrscheinlich awk verwenden .
In diesem Fall wird es:
$ echo "Wassermelonen und Gurken" | awk '{ drucke $NF }'
Gurken
In awk NF ist die Anzahl der Felder in der Zeile, also $NF bedeutet das letzte Feld in der Zeile.