Holen Sie sich den letzten Teil der Zeichenfolge nach dem Bindestrich


10

Gibt es eine einfache Befehlszeile, um den letzten Teil einer durch Bindestriche getrennten Zeichenfolge zu extrahieren? Zum Beispiel möchte ich extrahieren 123aus foo-bar-123.

Antworten:


23

Sie können die Parametererweiterung von Bash verwenden :

string="foo-bar-123" && printf "%s\n" "${string##*-}"
123

Wenn Sie einen anderen Prozess verwenden möchten, können Sie mit Awk:

echo "foo-bar-123" | awk -F- '{print $NF}'

Oder wenn Sie Sed bevorzugen:

echo "foo-bar-123" | sed 's/.*-//'

Ein leichter externer Prozess, wie Glenn Jackman vorschlägt, ist cut:

cut -d- -f3 <<< "$string"

Die Erweiterung der Shell-Parameter ist die beste Antwort. Ein leichtes externes Werkzeug ist cut:cut -d- -f3 <<< "$string"
Glenn Jackman

1
@glennjackman - re : cut; in der Tat, aber nur, wenn die Nummer des letzten Feldes bekannt ist (da die Frage etwas mehrdeutig ist: Gibt es eine einfache Befehlszeile, um den letzten Teil zu extrahieren ...? )
don_crissti

2
@don_crissti, in der Tat. Man könnte es tun rev <<< "$string" | cut -d- -f1 | rev, aber dann weichen wir von der Einfachheit der param.expansion ab.
Glenn Jackman


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.