grep: Matching auf literal „+“
Frage
Ich brauche Vorkommen von "(+)" in meiner SQL-Skripte zu finden, (das heißt, Oracle äußeren Ausdrücke verbinden). Die Erkenntnis, dass "+", "(" und ")" sind alle Sonder regex Zeichen, habe ich versucht:
grep "\(\+\)" *
Nun ist diese zurückkehrt Vorkommen von „(+)“, aber andere auch Linien. (. Scheinbar alles mit öffnen und schließen Pars auf der gleichen Linie) Hinweis darauf, dass Pars für längere grep nur etwas Besonderes sind, habe ich versucht:
grep "(\+)" * grep "(\\+)" *
Beide zurück nur Linien, die „()“ enthalten. So davon aus, dass „+“ kann nicht entgangen sein, habe ich versucht, einen alten Trick:
grep "([+])" *
Das funktioniert. Ich das Ergebnis mit einem nicht-regex Werkzeug gegengeprüft.
Frage : Kann jemand erklären, was genau mit dem Zeichen "+" los? Gibt es eine weniger kludgy Art und Weise übereinstimmen, auf "(+)"?
(Ich bin mit dem cygwin grep.)
Bearbeiten : Danke für die Lösungen. - Und ich sehe jetzt, dass pro GNU grep Handbuch, das Bruno verwies, "\+
", wenn sie in einem gebrauchten Grunde Ausdruck gibt "+" seine erweitert Bedeutung, und deshalb entspricht eine oder-mehr „(“ s, gefolgt von einem „)“. Und in meinen Dateien, die immer "()".
Lösung
GNU grep unterstützt zwei Syntax für reguläre Ausdrücke (die in Cygwin enthalten): Grund- und erweitert. grep
verwendet grundlegende reguläre Ausdrücke und egrep
oder grep -E
verwendet erweiterte reguläre Ausdrücke. Der grundlegende Unterschied, aus dem grep Handbuch , ist die folgende:
In einfachen regulären Ausdrücken der Metazeichen
?
,+
,{
,|
,(
und)
ihre besondere Bedeutung verlieren; stattdessen verwenden Sie die backslashed Versionen\?
,\+
,\{
,\|
,\(
und\)
.
Da Sie die normalen Bedeutung der Zeichen (
+
)
, eine der folgenden zwei Formen sollten für Ihren Zweck arbeiten:
grep "(+)" * # Basic
egrep "\(\+\)" * # Extended
Andere Tipps
Sie müssen wahrscheinlich einige Schrägstriche hinzufügen, weil die Shell sie schluckt.
ETA. Eigentlich habe ich gerade versucht, auf meine Cygwin und grep "(+)"
scheint ganz gut zu funktionieren, was Sie wollen