Bash corrispondenza del modello globale [0-9]
può essere utilizzato per abbinare la cifra:
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
In alternativa, puoi utilizzare la corrispondenza del modello regex con =~
:
if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi
Usa una classe di caratteri:[0-9]
corrisponde a 0
, 9
, e ogni carattere tra di loro nel set di caratteri, che - almeno in Unicode (es. UTF-8) e sottoinsiemi di caratteri (es. US-ASCII, Latin-1) - sono le cifre 1
attraverso 8
. Quindi corrisponde a una qualsiasi delle 10 cifre latine.
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Usando =~
invece di ==
cambia il tipo di modello da modelli "glob" standard della shell a espressioni regolari ("regex" in breve). Puoi rendere un'espressione regolare equivalente un po' più corta:
if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi
Il primo accorciamento deriva dal fatto che una regex deve corrispondere solo a qualsiasi parte della stringa, non all'intera cosa. Pertanto non è necessario l'equivalente del *
iniziale e finale s che trovi nel modello glob.
La seconda riduzione di lunghezza è dovuta al {n}
sintassi, che consente di specificare un numero esatto di ripetizioni del pattern precedente invece di ripetere effettivamente il pattern stesso nella regex. (Puoi anche abbinare qualsiasi intervallo di conteggi di ripetizioni specificando un minimo e un massimo, ad esempio [0-9]{2,4}
per abbinare due, tre o quattro cifre di fila.)
Vale la pena notare che potresti anche usare una classe di caratteri con nome per abbinare le cifre. A seconda della tua lingua, [[:digit:]]
potrebbe essere esattamente equivalente a [0-9]
, oppure può includere caratteri di altri script con la proprietà Unicode "Number, Decimal Digit".
if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi