Reguläre Ausdrücke mit dem =~
Operator
Bashs =~
Operator ermöglicht leistungsstarkes Matching regulärer Ausdrücke. Reguläre Ausdrücke bieten weit größere Flexibilität als einfaches Wildcard-Matching und erlauben es Ihnen, komplexe Muster für die Stringmanipulation und -validierung zu definieren. Der Operator liefert „true“, wenn die Zeichenkette links dem regulären Ausdruck rechts entspricht, der immer in doppelte Anführungszeichen eingeschlossen sein muss.
string="Dies ist ein Teststring mit 123 Ziffern"
if [[ "$string" =~ "test" ]]; then
echo "Der String enthält 'test'"
fi
if [[ "$string" =~ "string$" ]]; then # $ markiert das Ende des Strings
echo "Der String endet mit 'string'"
fi
if [[ "$string" =~ "[0-9]+" ]]; then # Übereinstimmung mit einer oder mehreren Ziffern
echo "Der String enthält Ziffern"
fi
if [[ "$string" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$ ]]; then
echo "Der String sieht aus wie eine E-Mail-Adresse"
fi
Die obigen Beispiele zeigen die grundlegende Verwendung regulärer Ausdrücke. Für komplexere Muster konsultieren Sie ein umfassendes Tutorial oder eine Referenz zu regulären Ausdrücken. Die Flexibilität regulärer Ausdrücke macht sie ideal für Aufgaben wie die Validierung von E-Mail-Adressen, IP-Adressen oder anderen strukturierten Daten in Strings.
Wildcard-Matching mit dem *
Operator
Das *
Wildcard, einfacher als reguläre Ausdrücke, entspricht null oder mehr Zeichen. Es wird häufig im File Globbing und in einfachen bedingten Prüfungen verwendet. Obwohl weniger leistungsstark, ist es für einfache Szenarien effizient.
files=(*.txt) # Erweitert zu einer Liste aller .txt Dateien
if [[ "$filename" == "*.log" ]]; then
echo "Dies ist eine Logdatei"
fi
if [[ "$variable" == "pre*suf" ]]; then
echo "Die Variable beginnt mit 'pre' und endet mit 'suf'"
fi
Das erste Beispiel zeigt File Globbing; die anderen zeigen einfaches Mustermatching in bedingten Anweisungen. Beachten Sie, dass ==
, nicht =~
, für Wildcard-Matching verwendet wird.
Extrahieren von Untermustern
Sowohl reguläre Ausdrücke als auch Wildcards können Teile eines übereinstimmenden Strings extrahieren, obwohl sich die Methoden deutlich unterscheiden.
Reguläre Ausdrücke (mit =~
)
Reguläre Ausdrücke verwenden Fanggruppen, definiert mit Klammern ()
, um bestimmte Teile des übereinstimmenden Strings zu isolieren. Diese Fanggruppen sind über das BASH_REMATCH
Array zugänglich.
string="Meine Benutzer-ID ist 12345"
if [[ "$string" =~ "ID ist ([0-9]+)" ]]; then
user_id="${BASH_REMATCH[1]}"
echo "Benutzer-ID: $user_id"
fi
([0-9]+)
fängt eine oder mehrere Ziffern ein, die in ${BASH_REMATCH[1]}
gespeichert werden.
Wildcards (mit *
)
Wildcard-Matching unterstützt keine direkte Extraktion von Untermustern. Stattdessen benötigen Sie Stringmanipulation nach einem einfachen Match.
filename="mein_report_2024-10-26.txt"
if [[ "$filename" == "mein_report_*.txt" ]]; then
date="${filename%.*}" # Entfernt die '.txt' Erweiterung
date="${date##*_}" # Entfernt alles vor dem letzten '_'
echo "Reportdatum: $date"
fi
Dieses Beispiel verwendet Parametererweiterung, um die Extraktion von Untermustern zu erreichen, was einen weniger eleganten, aber effektiven Ansatz für einfachere Szenarien darstellt.
Bash bietet vielseitige Möglichkeiten zum Mustermatching. Wählen Sie die Methode – reguläre Ausdrücke oder Wildcards – die am besten zu Ihren Bedürfnissen passt, wobei Sie Leistung und Einfachheit in Einklang bringen.