Regex-Match in Bash
- Regex-Match-Operator in der Bash
- Zahlen in der Bash abgleichen
- Regex-Anpassung am Anfang einer Zeichenkette in Bash
- Regex-Abgleich des Endes einer Zeichenkette in Bash
- Regex-Abgleich E-Mail 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.