Musterabgleich in Bash

Olorunfemi Akinlua 20 Juni 2023
  1. Verwenden Sie den Operator =~ für den Musterabgleich
  2. Verwenden Sie den Operator * für den Musterabgleich
  3. Verwenden Sie subpatterns für den Musterabgleich
Musterabgleich in Bash

Der Musterabgleich ist eine leistungsstarke Funktion in Bash, mit der Sie Zeichenfolgen mit Mustern vergleichen können, um Übereinstimmungen zu finden oder Aktionen basierend auf dem Vergleichsergebnis auszuführen. Dies kann in Situationen nützlich sein, wie z. B. beim Überprüfen des Formats einer Zeichenfolge oder beim Extrahieren von Teilzeichenfolgen aus einer größeren Zeichenfolge.

In diesem Artikel wird erläutert, wie Sie Mustervergleiche in Bash durchführen, und es werden einige gängige Operatoren und Techniken behandelt, die beim Mustervergleich verwendet werden.

Verwenden Sie den Operator =~ für den Musterabgleich

Um zu verstehen, wie der Musterabgleich in Bash funktioniert, schauen wir uns zunächst den Operator =~ an, der zum Durchführen des Musterabgleichs verwendet wird. Dieser Operator benötigt zwei Operanden: die zu vergleichende Zeichenfolge und das Muster, mit dem verglichen werden soll.

Nehmen wir zum Beispiel an, wir haben eine Zeichenfolge namens my_string, die eine URL enthält, und wir möchten prüfen, ob sie mit "http" oder "https" beginnt. Wir können den Operator =~ verwenden, um diesen Vergleich durchzuführen.

my_string="https://www.example.com"

if [[ $my_string =~ ^https?:// ]]; then
  echo "The string starts with a valid URL"
fi

Ausgang:

The string starts with a valid URL

Im obigen Code verwenden wir den Operator =~, um die Variable my_string mit dem Muster ^https?:// zu vergleichen. Das Zeichen ^ gibt an, dass das Muster am Anfang der Zeichenfolge übereinstimmen muss, während das Zeichen ? Zeichen gibt an, dass das vorangestellte Zeichen (in diesem Fall das s in https) optional ist.

Das bedeutet, dass das Muster am Anfang der Zeichenfolge entweder mit "http://" oder "https://" übereinstimmt.

Wenn der Vergleich erfolgreich ist, wird die if-Anweisung ausgeführt und die Meldung "Der String beginnt mit einer gültigen URL" ausgegeben.

Verwenden Sie den Operator * für den Musterabgleich

Ein weiterer gebräuchlicher Operator beim Musterabgleich ist das Zeichen * (Sternchen), das angibt, dass das vorhergehende Zeichen null oder mehrmals abgeglichen werden kann. Angenommen, wir haben eine Zeichenfolge, die eine Zahl enthält, und wir möchten überprüfen, ob es sich um eine gültige Dezimalzahl mit höchstens zwei Dezimalstellen handelt.

Wir können den Operator * verwenden, um diesen Vergleich durchzuführen.

my_string="3.14"

if [[ $my_string =~ ^[0-9]+.[0-9]{0,2}$ ]]; then
echo "The string is a valid decimal number"
else
echo "The string is not a valid decimal number"
fi

Ausgang:

The string is a valid decimal number

Im obigen Code verwenden wir den Operator =~, um die Variable my_string mit dem Muster ^[0-9]+\.[0-9]{0,2}$ zu vergleichen. Das Zeichen ^ zeigt an, dass das Muster am Anfang der Zeichenfolge übereinstimmen muss, während das Zeichen $ anzeigt, dass das Muster am Ende übereinstimmen muss.

Die Zeichenklasse [0-9] stimmt mit jeder Ziffer von 0-9 überein, und das Zeichen + gibt an, dass die vorhergehende Zeichenklasse einmal oder mehrmals übereinstimmen muss.

Wir verwenden das Zeichen \ (Backslash), um der besonderen Bedeutung des . zu entgehen. (Punkt) Zeichen, das verwendet wird, um ein beliebiges einzelnes Zeichen zu finden. Der Quantifizierer {0,2} gibt an, dass das vorhergehende Zeichen (in diesem Fall die Zeichenklasse [0-9]) null- bis zweimal übereinstimmen muss.

Das bedeutet, dass das Muster nur Zahlen mit höchstens zwei Dezimalstellen findet, wie zum Beispiel "3.14" oder "42.00".

Wenn der Vergleich erfolgreich ist, wird die if-Anweisung ausgeführt und die Meldung "Der String ist eine gültige Dezimalzahl" ausgegeben.

Verwenden Sie subpatterns für den Musterabgleich

Eine weitere übliche Technik, die beim Musterabgleich verwendet wird, ist die Verwendung von Teilmustern. Ein Teilmuster ist ein in Klammern eingeschlossener Teil eines Musters und kann verwendet werden, um Zeichen zu gruppieren oder auf eine übereinstimmende Teilzeichenfolge in der Eingabezeichenfolge zu verweisen.

Nehmen wir zum Beispiel an, wir haben eine Zeichenfolge, die ein Datum im Format JJJJ-MM-TT enthält, und wir möchten Jahr, Monat und Tag aus der Zeichenfolge extrahieren. Wir können Teilmuster verwenden, um diese Extraktion durchzuführen.

my_string="2022-11-20"

if [[ $my_string =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ ]]; then
  year=${BASH_REMATCH[1]}
  month=${BASH_REMATCH[2]}
  day=${BASH_REMATCH[3]}

  echo "The year is: $year"
  echo "The month is: $month"
  echo "The day is: $day"
fi

Ausgang:

The year is: 2022
The month is: 11
The day is: 20

Im obigen Code verwenden wir den Operator =~, um die Variable my_string mit der Variable ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ Muster. Die Zeichen ^ und $ geben an, dass das Muster mit der gesamten Zeichenfolge übereinstimmen muss, während die Zeichen ([0-9]{4}), ([0-9]{2}) und ([0-9]{2}) Untermuster stimmen jeweils mit den Jahres-, Monats- und Tagesteilen des Datums überein.

Wenn der Vergleich erfolgreich ist, wird die if-Anweisung ausgeführt und das Jahr, der Monat und der Tag werden aus der Eingabezeichenfolge extrahiert. Die extrahierten Teilstrings werden im Array BASH_REMATCH gespeichert und sind über die Indizes 1, 2 und 3 zugänglich, die jeweils dem ersten, zweiten und dritten Teilmuster entsprechen.

Zusammenfassend lässt sich sagen, dass der Musterabgleich eine leistungsstarke Funktion in Bash ist, mit der Sie Zeichenfolgen mit Mustern vergleichen können, um Übereinstimmungen zu finden oder Aktionen basierend auf dem Ergebnis des Vergleichs auszuführen. Dies kann mit dem Operator =~ erfolgen, der einen String und ein Muster als Operanden nimmt und true zurückgibt, wenn der String dem Muster entspricht.

Zu den gängigen Operatoren und Techniken, die beim Musterabgleich verwendet werden, gehören der Operator * (Sternchen), der das vorangehende Zeichen null oder mehrmals abgleicht, und Teilmuster, mit denen Sie Zeichen gruppieren oder übereinstimmende Teilzeichenfolgen aus der Eingabezeichenfolge extrahieren können.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn