Wann wird \ in der grep-Suchzeichenfolge verwendet?

328
user9371654

Ich habe einen ähnlichen Dateiinhalt wie:

A+B C+D A+B 

Das sind Strings. Ich möchte nach dem Vorkommen von suchen A+B. Also schreibe ich den Befehl als: grep 'A+B' test.txt. Wenn ich jedoch schreibe grep 'A\+B' test.txt, bekomme ich keine Ergebnisse? Während if anstelle +der Zeichenfolge enthält ., wenn ich hinzufügen \oder noch hinzufügen, erhalte ich die Suchergebnisse. Ich verstehe nicht:

1) Wann soll ich hinzufügen \und wann nicht?

2) Warum habe ich keine Ergebnisse erhalten, als ich es hinzugefügt habe, +während ich Ergebnisse erhalten habe, als ich es hinzugefügt habe?.

1

2 Antworten auf die Frage

0
Arkadiusz Drabczyk

Sie haben nicht angegeben, welche Variante grepSie verwenden, es ist jedoch möglich, dass Sie sie verwenden GNU grep. Standardmäßig grepverwendet Basic Regular Expressionsund wie im Folgenden erläutert man grep:

Grundlegende vs. Erweiterte reguläre Ausdrücke

In regulären Ausdrücken
verlieren die Metazeichen?, +, {, |, ( Und) ihre besondere Bedeutung. Verwenden Sie stattdessen die Backslash-
Versionen \?, +, {, \ |, (und).

Beachten Sie, dass Sie bei Verwendung -Ezu wechseln würden Extended Regular Expressions (ERE)und verwenden müssten, \+da standardmäßig in EREund viele andere reguläre Ausdrücke für Syntax +steht one or more of the preceding character:

$ grep -E 'A\+B' test.txt A+B A+B 

Also, um deine Fragen zu beantworten:

  1. Sie sollten verwenden, \wenn Sie nach einem Buchstaben suchen möchten.

  2. In BREeinem Punkt steht any charactergenau wie in ERE.

0
AFH

In egrep(oder grep -E) erweiterte reguläre Ausdrücke sind aktiviert. Diese schließen ein:

+ - match one or more instances of the previous match pattern. 

Diese können in basic grepmit einem vorangestellten Schrägstrich verwendet werden, der nicht die übliche Bedeutung hat, ein Literal zu erzeugen, sondern die egrepFunktion aufruft .

Die folgenden sind also gleichwertig:

egrep 'A+B' grep 'A\+B' 

In beiden Fällen ist das Spiel für eine oder mehrere ASekunden gefolgt von B.

Da egrepes eine besondere Bedeutung für '+' gibt, muss es für eine wörtliche Übereinstimmung mit einem Escape-Zeichen versehen werden. Daher sind die folgenden auch gleichwertig:

egrep 'A\+B' grep 'A+B' 

Diese stimmen beide überein A+B, da in beiden Fällen nach einem wörtlichen '+' gesucht wird.

Andere egrepFunktionen, die durch Escape-Funktion verwendet werden können, grepumfassen \|alternative Übereinstimmungszeichenfolgen und \, wobei M und N Zahlen sind, die das Minimum und Maximum der Wiederholungen eines Match-Musters darstellen. Diese sind nicht geschützt egrep.