Saya telah meletakkan string Anda dalam array sehingga dapat dengan mudah diulang untuk demonstrasi ini.
Ini menggunakan pencocokan ekspresi reguler bawaan Bash.
Hanya diperlukan pola yang sangat sederhana. Dianjurkan untuk menggunakan variabel untuk menahan pola daripada memasukkannya secara langsung dalam tes pertandingan. Ini penting untuk pola yang lebih kompleks.
str[0]="My horse weighs 3000 kg but the car weighs more"
str[1]="Maruska found 000011 mushrooms but only 001 was not with meat"
str[2]="Yesterday I almost won the lottery 0000020 CZK but in the end it was only 05 CZK"
patt='([[:digit:]]+)'
for s in "${str[@]}"; do [[ $s =~ $patt ]] && echo "[${BASH_REMATCH[1]}] - $s"; done
Saya menyertakan tanda kurung siku hanya untuk mematikan angka secara visual.
Keluaran:
[3000] - My horse weighs 3000 kg but the car weighs more
[000011] - Maruska found 000011 mushrooms but only 001 was not with meat
[0000020] - Yesterday I almost won the lottery 0000020 CZK but in the end it was only 05 CZK
Untuk mendapatkan angka tanpa nol terkemuka, cara termudah adalah dengan memaksa konversi basis-10.
echo "$(( 10#${BASH_REMATCH[1]} ))"
Mengganti itu, output tampak seperti apa yang Anda minta:
3000
11
20