GNU/Linux >> Tutoriales Linux >  >> Linux

Coincidencia de patrón de secuencia de comandos Bash

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

Linux
  1. Typeset -a ¿Está dando un error en el script?

  2. Bash Script para completar una plantilla?

  3. Bash Script - Ejemplo de Hola mundo

  4. Ejecutar script bash desde URL

  5. Función Bash para encontrar el patrón de coincidencia de archivos más nuevo

35 ejemplos de secuencias de comandos Bash

Cómo ejecutar un script Bash

Script bash de Linux para extraer la dirección IP

Negar si la condición en bash script

Ejecute el comando bash en la canalización de jenkins

La coincidencia de patrones no funciona en el script bash