Sagen wir, ich führe den Befehl SayStuff aus
$ SayStuff
und die Ausgabe ist
Watermelons and cucumbers
Jetzt. Angenommen, ich möchte den Teilstring cucumbers
aus der Ausgabe extrahieren und in etwas umleiten.
Die Art und Weise, wie ich programmgesteuert vorgehen würde, wäre, die Ausgabe durch das Trennzeichen Space in ein Array aufzuteilen und darauf zu verweisen ArrayName[2]
. Ich bin ziemlich neu in Shell-Skripten und habe nur halbkryptische cut
Beispiele ausgegraben, von denen keines Sinn ergab.
Irgendwelche Ideen?
linux
command-line
bash
krystah
quelle
quelle
cut
keine variable Anzahl von Leerzeichen verarbeitet wirdawk
.Ich würde wahrscheinlich eine der Optionen verwenden, die bereits von @slhck angegeben wurden, aber hier sind einige weitere Möglichkeiten, dies zu tun:
Verwenden von Arrays wie in jeder anderen Sprache:
Der
var=()
deklariert ein Array,$(command)
speichert die Ausgabe des Befehls. Also,foo=( $(SayStuff) )
speichert die Ausgabe vonSayStuff
in das Arrayfoo
und dann istecho
es das dritte Element mit${foo[2]}
.sed
Der
sed
Befehl ersetzt (s///
) alles mit dem letzten Wort. Der reguläre Ausdruck passt auf alles bis zu einem Leerzeichen (.*
), das auf alles bis zum letzten Leerzeichen passt und dann das letzte Wort erfasst(\(.*\)
. Da das Wort gefangen genommen wurde, können wir es als bezeichnen\1
.Eine einfachere Version:
bash
Diese Fähigkeiten String - Manipulation von Anwendungen bash finden Sie hier für weitere Details.
Noch mehr Bash
Perl, wo gibt es natürlich viele Möglichkeiten, dies zu tun:
Die
-a
Markenperl
verhalten sich wieawk
: Zeilen werden mit Leerzeichen geteilt und im Array gespeichert@F
. Wir drucken dann das letzte Element von@F
($#F
ist die Anzahl der Elemente in@F
). Das-l
sagt Perl eine neue Zeile zu jeder hinzufügenprint
Aussage, die ,-n
dass es STDIN Zeile für Zeile verarbeitet werden soll und-e
dass es das Skript auf der Kommandozeile angegeben ausgeführt werden soll.Die Optionen wurden oben erklärt, wir löschen nur alles bis zum letzten Leerzeichen und drucken (
-p
).Hier übergeben wir
Watermelons and cucumbers
als Argumente, die Perl im@ARG
Array speichert, und geben so das letzte Element von aus@ARG
.Betrug. Dieser verwendet
sed
, um Leerzeichen in Zeilenumbrüche umzuwandeln und danntail
nur die letzte Zeile zu drucken.grep und reguläre Ausdrücke,
-o
die nur die übereinstimmende Zeichenfolge ausgeben.Betrug
quelle
Hier ist noch eine Erklärung:
Wenn Sie also das 3. Feld benötigen und es durch Leerzeichen '' begrenzt ist, ist es das
Wenn Sie das letzte Feld möchten, sollten Sie wahrscheinlich awk verwenden .
In diesem Fall wird es:
In
awk
NF bedeutet die Anzahl der Felder in der Zeile$NF
das letzte Feld in der Zeile.quelle