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 "()".

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top