Ich versuche den Unterschied zwischen grep -e
und grep -E
. Jetzt habe ich von grep manpage
Folgendes erhalten:
-E, –extended-regexp
Interpretieren Sie PATTERN als erweiterten regulären Ausdruck (siehe unten).
-e PATTERN, –regexp = PATTERN
Verwenden Sie PATTERN als Muster. nützlich, um Muster zu schützen, die mit –
beginnen. Die obige Erklärung ist für mich nicht sinnvoll.
Kann jemand sie erklären? Ich benutze examples
Was ist der Unterschied zwischen den beiden und wann welche Option verwendet werden soll.
PS: Version: grep (GNU grep) 2.10
Kommentare
- Siehe auch: unix.stackexchange.com/questions/17949/…
- Der Zweck von
-e
besteht eigentlich nur darin, zu unterscheiden, wenn eine Regex mit einem Bindestrich beginnt.grep ---foo
gibt alsounrecognized option: ---foo
an, aber Sie könnengrep -e ---foo
sagen, um nach dem regulären Ausdruck---foo
.
Antwort
-e
ist ausschließlich das Flag für die Angabe des Musters, mit dem Sie übereinstimmen möchten. -E
steuert, ob Sie bestimmte Sonderzeichen maskieren müssen.
man grep
erklärt -E
es ist ein bisschen mehr:
Basic vs Extended Regular Expressions In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \). Traditional egrep did not support the { meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a literal {. GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification. For example, the command grep -E "{1" searches for the two-character string {1 instead of reporting a syntax error in the regular expression. POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.
Kommentare
- Dies ist also der Grund, wann Ich mache
echo "hello" | grep -o -e 'h|l'
Ich erhalte keine Ausgabe, weil|
seine spezielle Bedeutung verloren hat und wenn ichecho "hello" | grep -o -E 'h|l'
Ich erhalte die gewünschte Ausgabe. - Ja.
echo "hello" | grep -o -e 'h' -e 'l'
funktioniert, wenn Sie in diesem Fall die-E
wegwerfen möchten. -
grep -e -o 'h|l'
stimmt buchstäblich mith|l
überein, währendgrep -e -o 'h\|l'
mith
oderl
und mit -E ' ist das Gegenteil - @ronnie es ' Es ist bedauerlich, dass Sie mehr als 200 Ruf benötigen, damit diese " -Funktion " Ihnen zwischen SE-Sites folgt …
Antwort
Auch grep -e
ermöglicht die Verwendung mehrerer Zeichenfolgen für die Suche: "grep -e "abc" -e "def" -e "123"
sucht nach einer der drei folgenden Zeichenfolgen: abc
sowie def
und 123
.
Dies funktioniert ziemlich ähnlich wie grep "abc\|def\|123"
, wobei \|
steht für or
aber c könnte etwas klarer zu lesen sein.
Da die wichtigsten Fakten zu grep -E
hier bereits erläutert werden, möchte ich nur hinzufügen, was ich zu diesem Thema zusammengefasst habe zu einer ganz ähnlichen Frage: Regulärer Ausdruck zum Suchen von Doppelzeichen in Bash
Antwort
siehe unten
/ erweitert
grep versteht drei verschiedene Versionen der Syntax regulärer Ausdrücke: „Basic“, „Extended“ und „Perl“. In GNU grep gibt es keinen Unterschied in der verfügbaren Funktionalität zwischen einfacher und erweiterter Syntax. In anderen Implementierungen sind reguläre Grundausdrücke weniger leistungsfähig. Die folgende Beschreibung gilt für erweiterte reguläre Ausdrücke. Unterschiede für grundlegende reguläre Ausdrücke werden anschließend zusammengefasst. Reguläre Perl-Ausdrücke bieten zusätzliche Funktionen und sind in pcresyntax (3) und pcrepattern (3) dokumentiert, sind jedoch möglicherweise nicht auf jedem System verfügbar.
Also
In GNU grep gibt es keinen Unterschied in der verfügbaren Funktionalität zwischen grundlegender und erweiterter Syntax
Kommentare
- Die Funktionalität ist zwischen einfach und erweitert gleich, aber die Syntax unterscheidet sich geringfügig. Regexp-Sonderzeichen wie
(
,)
,|
usw. müssen mit einem Backslash versehen werden
Antwort
Nur um die Option -e
zu erläutern. -e
ist häufig optional:
grep PATTERN
ist identisch mit
grep -e PATTERN
es sei denn, wie in einer früheren Antwort und auf den Manpages angegeben, gibt es mehrere Suchmuster oder zum Schutz eines Musters, das mit einem Bindestrich (-) beginnt.