Bash Glob-Musterabgleich [0-9]
kann verwendet werden, um die Ziffer abzugleichen:
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Alternativ können Sie den Regex-Musterabgleich verwenden mit =~
:
if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi
Verwenden Sie eine Zeichenklasse:[0-9]
stimmt mit 0
überein , 9
, und alle dazwischen liegenden Zeichen im Zeichensatz, die - zumindest in Unicode (z. B. UTF-8) und Teilzeichensätzen (z. B. US-ASCII, Latin-1) - die Ziffern 1
sind bis 8
. Es stimmt also mit einer der 10 lateinischen Ziffern überein.
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Mit =~
statt ==
ändert den Mustertyp von Shell-Standard-„Glob“-Mustern in reguläre Ausdrücke (kurz „regexes“). Sie können eine äquivalente Regex etwas kürzer machen:
if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi
Die erste Kürzung ergibt sich aus der Tatsache, dass eine Regex nur mit irgendeinem Teil des Strings übereinstimmen muss, nicht mit dem Ganzen. Daher brauchen Sie das Äquivalent des führenden und abschließenden *
nicht s, die Sie im Glob-Muster finden.
Die zweite Längenreduzierung ist auf die {n}
zurückzuführen Syntax, mit der Sie eine genaue Anzahl von Wiederholungen des vorherigen Musters angeben können, anstatt das Muster selbst in der Regex zu wiederholen. (Sie können auch eine Reihe von Wiederholungszahlen abgleichen, indem Sie ein Minimum und ein Maximum angeben, z. B. [0-9]{2,4}
um entweder zwei, drei oder vier Ziffern hintereinander abzugleichen.)
Es ist erwähnenswert, dass Sie auch eine benannte Zeichenklasse verwenden können, um Ziffern abzugleichen. Je nach Gebietsschema [[:digit:]]
kann genau gleichbedeutend mit [0-9]
sein , oder es kann Zeichen aus anderen Skripten mit der Unicode-Eigenschaft "Zahl, Dezimalziffer" enthalten.
if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi