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.