Ich versuche den Unterschied zwischen grep -e
und zu verstehen grep -E
. Jetzt habe grep manpage
ich bekommen:
-E, --extended-regexp
Interpretieren Sie PATTERN als erweiterten regulären Ausdruck (siehe unten).
-e MUSTER, --regexp = MUSTER
Verwende MUSTER als Muster. nützlich, um Muster zu schützen, die mit - beginnen
Die obige Erklärung macht für mich keinen Sinn.
Kann mir jemand erklären, examples
worin der Unterschied besteht und wann ich welche Option verwenden soll?
PS: Version: grep (GNU grep) 2.10
-e
ist wirklich nur zu disambiguieren, wenn ein Regex mit einem Gedankenstrich beginnt. Alsogrep ---foo
gibtsunrecognized option: ---foo
doch kann man sagengrep -e ---foo
grep für den regulären Ausdruck---foo
.Antworten:
-e
ist genau das Flag, das angibt, mit welchem Muster Sie übereinstimmen möchten.-E
steuert, ob Sie bestimmte Sonderzeichen maskieren müssen.man grep
erklärt-E
es ein bisschen mehr:quelle
echo "hello" | grep -o -e 'h|l'
keine Ausgabe erhalte, weil es|
seine spezielle Bedeutung verliert und wenn ichecho "hello" | grep -o -E 'h|l'
die gewünschte Ausgabe erhalte.echo "hello" | grep -o -e 'h' -e 'l'
wird funktionieren, wenn Sie-E
in diesem Fall wegwerfen möchten .grep -e -o 'h|l'
wird buchstäblich übereinstimmen,h|l
währendgrep -e -o 'h\|l'
wird übereinstimmenh
oderl
und mit -E ist es das GegenteilAuch
grep -e
mehrere Strings für die Suche ermöglicht zu verwenden:'grep -e 'abc' -e 'def' -e '123'
für alle drei dieser Strings aussehen:abc
sowiedef
und123
.Dies funktioniert ganz ähnlich wie bei
grep 'abc\|def\|123'
where\|
stehtor
, könnte aber etwas klarer zu lesen sein.Da die wichtigsten Fakten
grep -E
hier bereits erläutert sind, möchte ich nur noch eine ganz ähnliche Frage hinzufügen, die ich zu diesem Thema zusammengefasst habe: Regulärer Ausdruck zum Finden von Doppelzeichen in Bashquelle
/verlängert
Also noch einmal.
quelle
(
,)
,|
usw. notwendig sein Backslash-escaped ihre besondere Bedeutung in der Grund regexp haben, aber nicht in ausgedehnt (wo sie benötigen als Stringliteral behandelt werden maskiert werden)Nur um die
-e
Option zu erläutern .-e
ist oft optional:ist identisch mit
es sei denn, wie in einer früheren Antwort und in den Manpages angegeben, gibt es mehrere Suchmuster, oder um ein Muster zu schützen, das mit einem Bindestrich (-) beginnt.
quelle