Wann wird \ in der Grep-Suchzeichenfolge verwendet?

Wann wird \ in der Grep-Suchzeichenfolge verwendet?

Ich habe einen Dateiinhalt ähnlich dem:

A+B
C+D
A+B

Dies sind Zeichenfolgen. Ich möchte nach dem Vorkommen von suchen A+B. Daher schreibe ich den Befehl wie folgt: grep 'A+B' test.txt. Wenn ich jedoch schreibe, grep 'A\+B' test.txterhalte ich keine Ergebnisse? Wenn ich jedoch anstelle +der Zeichenfolge enthält oder noch hinzufüge, erhalte ich die Suchergebnisse. Ich verstehe nicht:.\

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

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

Antwort1

Sie haben nicht angegeben, welche Variante grepSie verwenden, aber es ist möglich, dass Sie verwenden GNU grep. Standardmäßig grepwird verwendet Basic Regular Expressions, und wie in erklärt wird man grep:

Einfache vs. erweiterte reguläre Ausdrücke

In grundlegenden regulären Ausdrücken verlieren die Metazeichen ?, +, {, |, (,
und ) ihre besondere Bedeutung; verwenden Sie stattdessen die
Versionen mit Backslash \?, +, {, \|, (, und ).

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

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

Um Ihre Fragen zu beantworten:

  1. Sie sollten es verwenden \, wenn Sie nach wörtlichen Zeichen suchen möchten.

  2. In BREsteht ein einzelner Punkt für any charactergenau wie in ERE.

Antwort2

In egrep(oder grep -E) sind erweiterte reguläre Ausdrücke aktiviert. Dazu gehören:

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

grepDiese können in Basic mit einem vorangestellten Backslash verwendet werden , der nicht die übliche Bedeutung der Literalisierung hat, sondern die egrepFunktion aufruft.

Folgendes ist also gleichwertig: -

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

In beiden Fällen handelt es sich um eine Übereinstimmung mit einem oder mehreren As, unmittelbar gefolgt von B.

Da egrep„+“ in eine besondere Bedeutung hat, muss es maskiert werden, um eine wörtliche Übereinstimmung zu erzielen. Daher sind auch die folgenden Zeichen gleichwertig:

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

Beide stimmen überein A+B, da in beiden Fällen nach einem wörtlichen „+“ gesucht wird.

Andere egrepFunktionen, die durch Escapen in verwendet werden können, sind grepfür \|alternative Übereinstimmungszeichenfolgen und \{M,N\}, wobei M und N Zahlen sind, die die Mindest- und Höchstzahl von Wiederholungen in einem Übereinstimmungsmuster darstellen. Diese werden in nicht escaped egrep.

verwandte Informationen