Tanpa awk ?...Tapi sangat sederhana dengan awk:
echo 'maps.google.com' | awk -F. '{print $NF}'
AWK adalah alat yang jauh lebih kuat untuk dimiliki di saku Anda.-F jika untuk pemisah bidangNF adalah jumlah bidang (juga singkatan dari indeks yang terakhir)
Anda dapat mencoba sesuatu seperti ini:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
Penjelasan
rev
membalikkan "maps.google.com" menjadimoc.elgoog.spam
cut
menggunakan titik (yaitu '.') sebagai pembatas, dan memilih kolom pertama, yaitumoc
- terakhir kita balikkan lagi untuk mendapatkan
com
Tidak mungkin hanya menggunakan cut
. Berikut adalah cara menggunakan grep
:
grep -o '[^,]*$'
Ganti koma untuk pembatas lainnya.
Penjelasan:
-o
(--only-matching
) hanya menampilkan bagian masukan yang cocok dengan pola (defaultnya adalah mencetak seluruh baris jika mengandung kecocokan).[^,]
adalah kelas karakter yang cocok dengan karakter apa pun selain koma.*
cocok dengan pola sebelumnya nol kali atau lebih, jadi[^,]*
cocok dengan nol atau lebih karakter non-koma.$
cocok dengan akhir string.- Menggabungkan ini, pola cocok dengan nol atau lebih karakter non-koma di akhir string.
- Bila ada beberapa kemungkinan kecocokan,
grep
lebih suka yang dimulai paling awal. Jadi seluruh bidang terakhir akan dicocokkan.
Contoh lengkap:
Jika kita memiliki file bernama data.csv mengandung
one,two,three
foo,bar
lalu grep -o '[^,]*$' < data.csv
akan menampilkan
three
bar
Gunakan ekspansi parameter. Ini jauh lebih efisien daripada perintah eksternal apa pun, cut
(atau grep
) disertakan.
data=foo,bar,baz,qux
last=${data##*,}
Lihat BashFAQ #100 untuk pengantar manipulasi string asli di bash.
Unrar semua file dalam direktori tanpa diminta
Bagaimana cara menyiram cache CPU untuk wilayah ruang alamat di Linux?