2 Stimmen

Regulärer Ausdruck in BASH

Ich hatte gehofft, dass jemand meine kurze Frage beantworten kann, denn ich werde verrückt!

Ich habe vor kurzem begonnen, reguläre Ausdrücke in meiner Java-Programmierung zu lernen, bin aber ein wenig verwirrt, wie man bestimmte Funktionen direkt in BASH korrekt zum Laufen bringt. Zum Beispiel funktioniert der folgende Code nicht so, wie ich denke, dass er sollte.

echo 2222 | grep '2\{2\}'

Ich erwarte, dass sie zurückkehrt:

22

Ich habe verschiedene Varianten davon ausprobiert:

echo 2222 | grep '2{2}'
echo 2222 | grep -P '2\{2\}'
echo 2222 | grep -E '2\{2\}'

Allerdings sind mir die Ideen ausgegangen. Ich bin sicher, dies ist ein einfacher Parameter / Syntax zu beheben und würde gerne einige Hilfe! P.S. Ich habe tonnenweise gegoogelt und jede Referenz, die ich finde, funktioniert nicht in BASH; Regexe können auf so vielen verschiedenen Plattformen und Motoren laufen =/

9voto

Tim Punkte 8672
echo 2222 | grep -E '2{2}'
2222

Der Regex führt einen Mustervergleich in der Zeile durch und gibt entweder die gesamte Zeile (2222) aus, wenn sie übereinstimmt, oder nichts, wenn sie nicht übereinstimmt.

Es wird NICHT ein Teil des Outputs herausgezogen. Dafür brauchen Sie etwas wie sed:

echo 2222 | sed 's/.*\(2\{2\}\).*/\1/'
22

4voto

Sie können verwenden:

echo 2222 | grep -o '2\{2\}'

außer dass es die Ausgabe zweimal anzeigt, da es zweimal in dieser Zeile übereinstimmt.

1voto

Darkyo Punkte 83

Du hast nicht versucht

echo 2222 | grep -E '2{2}'

die zurückkehren werden 2222 d.h. "es passt zu deiner Zeile"

sed kann Ihnen helfen, Ihre Regexp zu visualisieren

echo 22 33 342 22 | sed  's/2\{2\}/<match>/g'

gibt zum Beispiel zurück

<match> 33 342 <match>

1voto

ghostdog74 Punkte 305138

Wenn Sie nur nach zwei "2 "s am Anfang einer Zeichenkette suchen, brauchen Sie keine externen Tools zu verwenden

string=2222
case "$string" in
 22*) echo "ok";;
esac

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X