GNU/Linux >> Tutoriales Linux >  >> Linux

Bash + Verificar nombre por expresión regular?

¿Por qué la siguiente expresión regular imprime valid? , cuando el nombre es hdpworker01 ?

name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid

Lo que trato de hacer es imprimir valid solo si el nombre coincide con worker[0-999] .

Ejemplo de resultados esperados:

  • Para name=worker01 :valid
  • Para name=hdpworker01 :sin salida

Respuesta aceptada:

Una expresión regular no está anclada al principio o al final de una cadena de forma predeterminada. Esto es diferente de, p. patrones de englobamiento de nombres de archivos. Esto significa que la expresión puede coincidir en cualquier parte de la cadena dada.

Para tener su expresión anclada al comienzo de la cadena, use

^worker[[:digit:]]

Para anclarlo adicionalmente al final de la cadena y permitir de uno a tres dígitos, use

^worker[[:digit:]]{1,3}$

Si desea hacer coincidir worker10 pero no worker01 o worker003 (sin números con ceros), utilice

^worker([0-9]|[1-9][0-9]{1,2})$

Linux
  1. ¿La definición de una expresión regular?

  2. Error de secuencia de comandos Bash:¿Se esperaba una expresión entera?

  3. Bash:¿Expresiones regulares en sustitución?

  4. Solucionar el error de nombre de host proporcionado no válido

  5. 6 ejemplos de expresiones condicionales de Bash (-e, -eq, -z, !=, [, [[ ..)

Expresión de secuencia Bash (rango)

¿Referencias de nombres circulares en la función Bash Shell, pero no en Ksh?

El nombre del archivo no se imprime correctamente con guión bajo _ en Bash

¿Por qué `\d` no funciona en expresiones regulares en sed?

Expresión regular para encontrar caracteres dobles en Bash

rango de números de extracción de grep