Bash coincidencia de patrones globales [0-9]
se puede usar para hacer coincidir el dígito:
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Alternativamente, puede usar coincidencia de patrones de expresiones regulares con =~
:
if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi
Usa una clase de carácter:[0-9]
coincide con 0
, 9
, y todos los caracteres entre ellos en el conjunto de caracteres, que, al menos en Unicode (p. ej., UTF-8) y conjuntos de caracteres de subconjuntos (p. ej., US-ASCII, Latin-1), son los dígitos 1
hasta 8
. Entonces coincide con cualquiera de los 10 dígitos latinos.
if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi
Usando =~
en lugar de ==
cambia el tipo de patrón de patrones "glob" estándar de shell a expresiones regulares ("regexes" para abreviar). Puede hacer que una expresión regular equivalente sea un poco más corta:
if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi
El primer acortamiento proviene del hecho de que una expresión regular solo tiene que coincidir con cualquier parte de la cadena, no con todo. Por lo tanto, no necesita el equivalente del *
inicial y final. s que encuentras en el patrón global.
La segunda reducción de longitud se debe al {n}
sintaxis, que le permite especificar un número exacto de repeticiones del patrón anterior en lugar de repetir el patrón en sí mismo en la expresión regular. (También puede hacer coincidir cualquiera de un rango de recuentos de repeticiones especificando un mínimo y un máximo, como [0-9]{2,4}
para hacer coincidir dos, tres o cuatro dígitos seguidos).
Vale la pena señalar que también podría usar una clase de caracteres con nombre para hacer coincidir los dígitos. Según su configuración regional, [[:digit:]]
puede ser exactamente equivalente a [0-9]
, o puede incluir caracteres de otras escrituras con la propiedad Unicode "Número, Dígito decimal".
if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi