¿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})$