Dapatkan bagian terakhir dari string setelah tanda hubung

10

Apakah ada baris perintah sederhana untuk mengekstraksi bagian terakhir dari string yang dipisahkan oleh tanda hubung? Misalnya, saya ingin mengekstrak 123dari foo-bar-123.

Steven
sumber

Jawaban:

23

Anda dapat menggunakan ekspansi parameter Bash :

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

Jika Anda ingin menggunakan proses lain, dengan Awk:

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

Atau, jika Anda lebih suka Sed:

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

Proses eksternal yang lebih ringan, seperti yang disarankan Glenn Jackman adalah cut:

cut -d- -f3 <<< "$string"
jasonwryan
sumber
ekspansi parameter shell adalah jawaban terbaik. Alat eksternal yang ringan adalah cut:cut -d- -f3 <<< "$string"
glenn jackman
1
@glennjackman - re: cut; memang tetapi hanya jika jumlah bidang terakhir diketahui (karena pertanyaannya agak ambigu: Apakah ada baris perintah sederhana untuk mengekstrak bagian terakhir ...? )
don_crissti
2
@don_crissti, memang. Seseorang bisa melakukannya rev <<< "$string" | cut -d- -f1 | rev, tetapi kemudian kita membelok dari kesederhanaan param.pembangunan.
glenn jackman
3
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
Joao
sumber
1
echo "foo-bar-123"| awk -F"-" '{print $3}' 
rcjohnson
sumber