
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.txt
erhalte 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 grep
Sie verwenden, aber es ist möglich, dass Sie verwenden GNU grep
. Standardmäßig grep
wird 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 -E
von zu wechseln würden Extended Regular Expressions (ERE)
und verwenden müssten, \+
weil in standardmäßig in
ERE
und 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:
Sie sollten es verwenden
\
, wenn Sie nach wörtlichen Zeichen suchen möchten.In
BRE
steht ein einzelner Punkt fürany character
genau wie inERE
.
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.
grep
Diese können in Basic mit einem vorangestellten Backslash verwendet werden , der nicht die übliche Bedeutung der Literalisierung hat, sondern die egrep
Funktion 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 A
s, 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 egrep
Funktionen, die durch Escapen in verwendet werden können, sind grep
fü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
.