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
revmembalikkan "maps.google.com" menjadimoc.elgoog.spamcutmenggunakan 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,
greplebih 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?