Match Regex dans Bash

Fumbani Banda 30 janvier 2023
  1. Opérateur de rematch dans Bash
  2. Faire correspondre les numéros dans Bash
  3. Regex correspond au début d’une chaîne dans Bash
  4. Regex correspond à la fin d’une chaîne dans Bash
  5. Courriel de correspondance d’expression régulière dans Bash
Match Regex 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.
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub