Ich habe Ihre Zeichenfolgen in ein Array eingefügt, damit sie für diese Demonstration problemlos wiederholt werden können.
Dies verwendet Bashs eingebauten Matching für reguläre Ausdrücke.
Es ist nur ein sehr einfaches Muster erforderlich. Es wird empfohlen, eine Variable zu verwenden, um das Muster zu halten, anstatt es direkt in den Übereinstimmungstest aufzunehmen. Es ist wichtig für komplexere Muster.
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
Ich habe die eckigen Klammern nur eingefügt, um die Zahlen visuell hervorzuheben.
Ausgabe:
[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
Um die Zahlen ohne die führenden Nullen zu erhalten, ist es am einfachsten, eine Basis-10-Konvertierung zu erzwingen.
echo "$(( 10#${BASH_REMATCH[1]} ))"
Wenn Sie dies ersetzen, sieht die Ausgabe wie folgt aus:
3000
11
20