Uzyskaj ostatnią część ciągu po łączniku

10

Czy istnieje prosta linia poleceń do wyodrębnienia ostatniej części ciągu oddzielonego łącznikami? Na przykład, chcę, aby wyodrębnić 123z foo-bar-123.

Steven
źródło

Odpowiedzi:

23

Możesz użyć rozszerzenia parametrów Basha :

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

Jeśli chcesz użyć innego procesu, z Awk:

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

Lub, jeśli wolisz Sed:

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

Lżejszy proces zewnętrzny, jak sugeruje Glenn Jackman, to cut:

cut -d- -f3 <<< "$string"
jasonwryan
źródło
rozszerzenie parametru powłoki jest najlepszą odpowiedzią. Lekkie narzędzie zewnętrzne to cut:cut -d- -f3 <<< "$string"
glenn jackman
1
@glennjackman - RE: cut; w rzeczy samej, ale tylko wtedy, gdy znany jest numer ostatniego pola (ponieważ pytanie jest nieco dwuznaczne: czy istnieje prosta linia poleceń do wyodrębnienia ostatniej części ...? )
don_crissti
2
@don_crissti, rzeczywiście. Można to zrobić rev <<< "$string" | cut -d- -f1 | rev, ale odwracamy się od prostoty rozszerzenia param.
glenn jackman
3
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
JJoao
źródło
1
echo "foo-bar-123"| awk -F"-" '{print $3}' 
rcjohnson
źródło