Pourquoi l'expression régulière suivante affiche-t-elle valid
, lorsque le nom est hdpworker01
?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Ce que j'essaie de faire, c'est d'imprimer valid
uniquement si le nom correspond à worker[0-999]
.
Exemple de résultats attendus :
- Pour
name=worker01
:valid
- Pour
name=hdpworker01
:pas de sortie
Réponse acceptée :
Une expression régulière n'est pas ancrée au début ou à la fin d'une chaîne par défaut. Ceci est différent de par ex. modèles de globalisation de noms de fichiers. Cela signifie que l'expression peut correspondre n'importe où dans la chaîne donnée.
Pour que votre expression soit ancrée au début de la chaîne, utilisez
^worker[[:digit:]]
Pour l'ancrer en plus à la fin de la chaîne et pour autoriser un à trois chiffres, utilisez
^worker[[:digit:]]{1,3}$
Si vous voulez faire correspondre worker10
mais pas worker01
ou worker003
(pas de chiffres remplis de zéros), utilisez
^worker([0-9]|[1-9][0-9]{1,2})$