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 also unrecognized option: ---foo an, aber Sie können grep -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 ich echo "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 mit h|l überein, während grep -e -o 'h\|l' mit h oder l 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.