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.

Steven
quelle

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"
Jasonwryan
quelle
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
3
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
JJoao
quelle
1
echo "foo-bar-123"| awk -F"-" '{print $3}' 
rcjohnson
quelle