GNU/Linux >> Tutoriels Linux >  >> Linux

Bash + Vérifier le nom par expression régulière ?

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

Linux
  1. Références de noms circulaires dans la fonction Bash Shell, mais pas dans Ksh ?

  2. Bash :Expressions régulières en substitution ?

  3. Résoudre l'erreur de nom d'hôte fourni non valide

  4. 6 Exemples d'expressions conditionnelles Bash ( -e, -eq, -z, !=, [, [[ ..)

  5. Identification du nom du signal reçu dans Bash

Expression de séquence bash (plage)

Comment connaître le nom du fichier de script dans un script Bash ?

Le nom de fichier ne s'imprime pas correctement avec le trait de soulignement _ dans Bash

Pourquoi `\d` ne fonctionne-t-il pas dans les expressions régulières de sed ?

Comment désactiver ou supprimer une fonction bash ?

Expression régulière avec sed