Regex-Match in Bash

Fumbani Banda 21 Dezember 2022
  1. Regex-Match-Operator in der Bash
  2. Zahlen in der Bash abgleichen
  3. Regex-Anpassung am Anfang einer Zeichenkette in Bash
  4. Regex-Abgleich des Endes einer Zeichenkette in Bash
  5. Regex-Abgleich E-Mail in Bash
Regex-Match in Bash

In diesem Tutorial wird die Übereinstimmung mit regulären Ausdrücken mit dem Rematch-Operator in der bash demonstriert.

Regex-Match-Operator in der Bash

Der Operator =~ ist als Regex-Match-Operator bekannt. Es verwendet die folgende Syntax.

[[ string =~ regex ]]

Der Re-Match-Operator führt einen regulären Ausdrucksvergleich der Zeichenkette von links nach rechts durch. Wenn die linke Seite mit der rechten Seite übereinstimmt, gibt der Operator eine 0 und andernfalls eine 1 zurück.

Zahlen in der Bash abgleichen

Das folgende Skript prüft, ob die Variable $greet die rechts genannten Zeichen enthält, in unserem Fall Zahlen. Bei vollständiger Übereinstimmung gibt der Re-Match-Operator eine 0 zurück und das Skript gibt die korrekte Ausgabe aus.

greet="Hello,World!"

if [[ $greet =~ [0-9] ]]; then
    printf "$greet is a number\n"
else
    printf "$greet is not a number\n"
fi

Da der Wert der Variablen $greet nur andere Zeichen als Zahlen enthält, gibt der Re-Match-Operator eine 1 zurück und gibt die Ausgabe unten aus.

Hello,World! is not a number

Hier erstellen wir im Skript eine neue Variable, die nur Zahlen namens num hat. Wir prüfen dann, ob die Variable num nur Zahlen enthält, und geben die entsprechende Ausgabe abhängig von dem vom Rematch-Operator zurückgegebenen Wert aus.

#!/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

Da die Variable num nur Zahlen enthält, gibt der Re-Match-Operator eine 0 zurück und das Skript gibt die folgende Anweisung aus.

2021 is a number

Regex-Anpassung am Anfang einer Zeichenkette in Bash

Das folgende Skript prüft, ob der Wert in der Variablen $greet mit Zahlen beginnt. Das ^ wird verwendet, um anzugeben, dass die Zeichen am Anfang einer Zeichenkette übereinstimmen. Abhängig von dem vom Operator zurückgegebenen Wert geben wir die entsprechende Ausgabe aus.

#!/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

Da der Wert in der Variablen $greet mit einer Zahl beginnt, gibt der Operator eine 0 zurück und gibt die Ausgabe darunter aus.

123Hello,World! starts with a digit(s).

Lassen Sie uns $greet wie unten gezeigt auf einen neuen Wert setzen und das Skript ausführen.

#!/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

Der Bash-Operator gibt 1 zurück, da der String in der Variablen $greet nicht mit einer Zahl beginnt. Das Skript druckt die unten gezeigte Ausgabe.

Hello,World!123 does not start with a digit(s)

Regex-Abgleich des Endes einer Zeichenkette in Bash

Das folgende Skript prüft, ob der Wert in der Variablen $greet mit Zahlen endet. Das $ wird verwendet, um anzugeben, dass die Zeichen am Ende der Zeichenkette übereinstimmen.

Die auszudruckende Ausgabe hängt vom Wert ab, der vom Re-Match-Operator zurückgegeben wird.

#!/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

Der String-Wert in der Variablen $greet endet mit Zahlen. Der Re-Match-Operator gibt eine 0 zurück und das Skript gibt die Ausgabe unten aus.

Hello,World!123 ends with a digit(s).

Lassen Sie uns den Wert der Variablen $greet ändern, wie im Skript unten gezeigt.

#!/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

Da der String in der Variablen $greet nicht mit einer oder mehreren Zahlen endet, gibt der Re-Match-Operator 1 zurück und das Skript gibt die Ausgabe unten aus.

123Hello,World! does not end with a digit(s)

Regex-Abgleich E-Mail in Bash

Um E-Mails abzugleichen, ist dies ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ Regex-Muster wird im Allgemeinen verwendet.

#!/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

Die folgende Ausgabe zeigt eine E-Mail, die geprüft wurde und die Prüfung bestanden hat.

example@delftstack.com is a valid email.

Lassen Sie uns das .com am Ende der E-Mail wie unten gezeigt entfernen und das Skript ausführen.

#!/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

Die E-Mail besteht den Test nicht, weil sie den letzten Teil, die .com, nicht enthält.

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

Verwandter Artikel - Bash Regex