Saya memiliki string seperti rev00000010
dan saya hanya ingin nomor terakhir, 10 dalam hal ini.
Saya sudah mencoba ini:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
keduanya tidak menghasilkan apa-apa, meskipun regex tampaknya benar (dicoba dengan regexr )
sed
regular-expression
Michael Niemand
sumber
sumber
Jawaban:
Perintah yang Anda berikan
sed
berarti: jika suatu baris cocok dengan regex, hapuslah . Bukan itu yang Anda inginkan.Ini berarti: pada setiap baris, hapus rev diikuti oleh sejumlah nol.
Juga, Anda tidak perlu
sed
untuk hal yang sederhana. Cukup gunakan bash dan ekspansi parameternya :sumber
POSIXly:
Akan menghapus semua hal di sebelah kiri digit paling tidak nol.
Secara singkat / universal:
sumber
test='rev 003A0.1056'
akan menghasilkannumber="3A0.1056"
. Yang kedua akan pecah pada ruang apa pun, nilai yang sama akan menghasilkan:003A0.1056
dari expr.Jika Anda sudah memiliki variabel TEST, cetak saja dengan semua huruf dihapus
atau
Jangan gunakan
%d
atauecho
-perintahkan nomor karena memimpin0
dipahami sebagaioctal
sumber
Beberapa opsi lagi (walaupun saya juga menyarankan Anda menggunakan Parameter Expansion seperti yang disarankan oleh @choroba):
Gunakan
sed
atauperl
untuk mengganti semuanya kecuali dua karakter terakhir dengan dua karakter terakhir. Ini secara efektif menghapus semuanya kecuali dua yang terakhir.Set
awk
pembatas bidang menjadi 2 atau lebih 0s dan cetak bidang terakhir:Ekstrak hanya dua karakter terakhir:
Cetak hanya byte terakhir ke-10:
Perhatikan bahwa semua penggunaan di atas
<<<$var
yang merupakan konstruksi bash. Untuk menggunakannya di shell lain, ubah keecho "$TEST" | command
.sumber
awk -F"[a-z]" '{print +$NF}'
Untuk mendapatkan "angka terakhir", pilih urutan angka apa saja di akhir string, dan ubah menjadi angka desimal:
Dengan Bash:
Dengan grep:
sumber