Match Regex dans Bash
- Opérateur de rematch dans Bash
- Faire correspondre les numéros dans Bash
- Regex correspond au début d’une chaîne dans Bash
- Regex correspond à la fin d’une chaîne dans Bash
- Courriel de correspondance d’expression régulière dans Bash
 
Ce didacticiel montre la correspondance d’expressions régulières à l’aide de l’opérateur de re-match dans bash.
Opérateur de rematch dans Bash
L’opérateur =~ est appelé opérateur de re-match. Il utilise la syntaxe suivante.
[[ string =~ regex ]]
L’opérateur de re-match effectue une correspondance d’expression régulière de la chaîne de gauche à droite. Si le côté gauche correspond au côté droit, l’opérateur renvoie un 0 et un 1 sinon.
Faire correspondre les numéros dans Bash
Le script ci-dessous vérifie si la variable $greet a les caractères mentionnés sur le côté droit, des nombres dans notre cas. S’il y a une correspondance complète, l’opérateur de re-match renvoie un 0 et le script imprime la sortie correcte.
greet="Hello,World!"
if [[ $greet =~ [0-9] ]]; then
    printf "$greet is a number\n"
else
    printf "$greet is not a number\n"
fi
Étant donné que la valeur de la variable $greet n’a que des caractères autres que des nombres, l’opérateur de re-match renvoie un 1 et imprime la sortie ci-dessous.
Hello,World! is not a number
Ici, nous créons une nouvelle variable dans le script qui n’a que des nombres appelés num. Nous vérifions ensuite si la variable num contient uniquement des nombres, et nous imprimons la sortie respective en fonction de la valeur renvoyée par l’opérateur de re-match.
#!/bin/env bash
num="2021"
if [[ $num =~ [0-9] ]]; then
    printf "$num is a number\n"
else
    printf "$num is not a number\n"
fi
Puisque la variable num n’a que des nombres, l’opérateur de re-match renvoie un 0, et le script imprime l’instruction ci-dessous.
2021 is a number
Regex correspond au début d’une chaîne dans Bash
Le script ci-dessous vérifie si la valeur de la variable $greet commence par des nombres. L’opérateur ^ est utilisé pour spécifier de faire correspondre les caractères au début d’une chaîne. En fonction de la valeur renvoyée par l’opérateur, nous imprimons la sortie respective.
#!/bin/env bash
greet="123Hello,World!"
if [[ $greet =~ ^[0-9] ]]; then
    printf "$greet starts with a digit(s).\n"
else
    printf "$greet does not start with a digit(s)\n"
fi
Puisque la valeur de la variable $greet commence par un nombre, l’opérateur renvoie un 0 et imprime la sortie ci-dessous.
123Hello,World! starts with a digit(s).
Définissons $greet sur une nouvelle valeur comme indiqué ci-dessous et exécutons le script.
#!/bin/env bash
greet="Hello,World!123"
if [[ $greet =~ ^[0-9] ]]; then
    printf "$greet starts with a digit(s).\n"
else
    printf "$greet does not start with a digit(s)\n"
fi
L’opérateur bash renverra 1 puisque la chaîne dans la variable $greet, ne commence pas par un nombre. Le script imprimera la sortie ci-dessous.
Hello,World!123 does not start with a digit(s)
Regex correspond à la fin d’une chaîne dans Bash
Le script ci-dessous vérifie si la valeur de la variable $greet se termine par des nombres. Le $ est utilisé pour spécifier de faire correspondre les caractères à la fin de la chaîne.
La sortie à imprimer dépendra de la valeur renvoyée par l’opérateur de re-match.
#!/bin/env bash
greet="Hello,World!123"
if [[ $greet =~ [0-9]$ ]]; then
    printf "$greet ends with a digit(s).\n"
else
    printf "$greet does not end with a digit(s)\n"
fi
La valeur de chaîne dans la variable $greet se termine par des nombres. L’opérateur de re-match renvoie un 0 et le script imprime la sortie ci-dessous.
Hello,World!123 ends with a digit(s).
Modifions la valeur de la variable $greet comme indiqué dans le script ci-dessous.
#!/bin/env bash
greet="123Hello,World!"
if [[ $greet =~ [0-9]$ ]]; then
    printf "$greet ends with a digit(s).\n"
else
    printf "$greet does not end with a digit(s)\n"
fi
Étant donné que la chaîne dans la variable $greet ne se termine pas par un ou plusieurs nombres, l’opérateur de re-match renvoie 1 et le script affiche la sortie ci-dessous.
123Hello,World! does not end with a digit(s)
Courriel de correspondance d’expression régulière dans Bash
Pour faire correspondre des courriels, on utilise généralement le motif d’expressions rationnelles ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$.
#!/bin/env bash
email="example@delftstack.com"
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
    printf "$email is a valid email.\n"
else
    printf "$email is not a valid email.\n"
fi
La sortie ci-dessous montre un e-mail qui a été vérifié et a réussi la vérification.
example@delftstack.com is a valid email.
Supprimons le .com à la fin de l’e-mail comme indiqué ci-dessous et exécutons le script.
#!/bin/env bash
email="example@delftstack"
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
    printf "$email is a valid email.\n"
else
    printf "$email is not a valid email.\n"
fi
L’email échoue au test car il n’a pas la dernière partie, le .com.
example@delftstack is not a valid email.
