Misalkan saya memiliki string 1:2:3:4:5
dan saya ingin mendapatkan bidang terakhirnya ( 5
dalam hal ini). Bagaimana saya melakukannya menggunakan Bash? Saya sudah mencoba cut
, tetapi saya tidak tahu bagaimana menentukan bidang terakhir -f
.
293
5
jika stringnya1:2:3:4:5:
(saat menggunakan operator string menghasilkan hasil kosong). Ini sangat berguna ketika parsing path yang bisa berisi (atau tidak)/
karakter finishing .${foo%:*}
.#
- dari awal;%
- dari ujung.#
,%
- pertandingan terpendek;##
,%%
- pertandingan terlama.echo ${pwd##*/}
tidak bekerja.pwd
sebagai variabel. Cobadir=$(pwd); echo ${dir##*/}
. Bekerja untukku!Cara lain adalah membalik sebelum dan sesudah
cut
:Ini membuatnya sangat mudah untuk mendapatkan yang terakhir kecuali satu bidang, atau rentang bidang apa pun yang dinomori dari akhir.
sumber
echo "1 2 3 4" | rev | cut -d " " -f1 | rev
rev
, hanya apa yang saya butuhkan!cut -b20- | rev | cut -b10- | rev
Sulit untuk mendapatkan bidang terakhir menggunakan potongan, tetapi berikut adalah beberapa solusi dalam awk dan perl
sumber
/
karakter finishing :/a/b/c/d
dan/a/b/c/d/
menghasilkan hasil yang sama (d
) saat memprosespwd | awk -F/ '{print $NF}'
. Jawaban yang diterima menghasilkan hasil kosong dalam kasus/a/b/c/d/
/
sebagai pembatas, dan jika path Anda/my/path/dir/
itu akan menggunakan nilai setelah pembatas terakhir, yang hanya berupa string kosong. Jadi yang terbaik adalah menghindari trailing slash jika Anda perlu melakukan hal seperti yang saya lakukan.awk '{$NF=""; print $0}' FS=: OFS=:
sering bekerja dengan cukup baik.Dengan asumsi penggunaan yang cukup sederhana (misalnya, tidak ada pembatas pembatas), Anda dapat menggunakan grep:
Breakdown - temukan semua karakter bukan pembatas ([^:]) di akhir baris ($). -o hanya mencetak bagian yang cocok.
sumber
Satu arah:
Lain, menggunakan array:
Lain lagi dengan array:
Menggunakan Bash (versi> = 3.2) ekspresi reguler:
sumber
Cukup terjemahkan pembatas ke baris baru dan pilih entri terakhir
tail -1
.sumber
\n
, tetapi untuk sebagian besar kasus adalah solusi yang paling mudah dibaca.Menggunakan
sed
:sumber
Jika bidang terakhir Anda adalah karakter tunggal, Anda bisa melakukan ini:
Periksa manipulasi string dalam bash .
sumber
a
, bukan yang terakhir bidang .Ada banyak jawaban bagus di sini, tetapi saya masih ingin membagikan yang ini dengan menggunakan nama kecil :
Namun itu akan gagal jika sudah ada beberapa '/' di string Anda . Jika slash / adalah pembatas Anda maka Anda hanya perlu (dan harus) menggunakan basename.
Ini bukan jawaban terbaik tetapi itu hanya menunjukkan bagaimana Anda bisa kreatif menggunakan perintah bash.
sumber
Menggunakan Bash.
sumber
echo ${!#}
sebagai gantieval echo \$${#}
.Pertama, gunakan xargs, pisahkan dengan menggunakan ":", - n1 berarti setiap baris hanya memiliki satu bagian. Kemudian, pring bagian terakhir.
sumber
sumber
Bagi mereka yang nyaman dengan Python, https://github.com/Russell91/pythonpy adalah pilihan yang bagus untuk menyelesaikan masalah ini.
Dari pythonpy bantuan:
-x treat each row of stdin as x
.Dengan alat itu, mudah untuk menulis kode python yang diterapkan pada input.
sumber
Mungkin agak terlambat dengan jawabannya meskipun solusi sederhana adalah membalik urutan string input. Ini akan memungkinkan Anda untuk selalu mendapatkan item terakhir tidak peduli panjangnya.
Penting untuk dicatat, jika menggunakan metode ini dan angkanya lebih besar dari 1 digit (Atau lebih besar dari satu karakter dalam keadaan apa pun), Anda perlu menjalankan perintah 'rev' lain di atas keluaran yang disalurkan.
Semoga saya bisa membantu, tepuk tangan
sumber
Solusi menggunakan read builtin:
Atau, untuk membuatnya lebih umum:
sumber
Jika Anda suka python dan memiliki opsi untuk menginstal paket, Anda dapat menggunakan utilitas python ini .
sumber
echo "1:2:3:4:5" | python -c "import sys; print(list(sys.stdin)[0].split(':')[-1])"
pythonp
paket adalah untuk membuat Anda melakukan hal yang samapython -c
dengan mengetik karakter lebih sedikit. Silakan lihat README di repositori.Pencocokan Regex
sed
adalah serakah (selalu berlaku untuk kejadian terakhir), yang dapat Anda gunakan untuk keuntungan Anda di sini:sumber