Qual è la differenza tra l'opzione grep -e e grep -E?


34

Sto cercando di capire la differenza tra grep -ee grep -E. Ora da grep manpageho ottenuto:

-E, --extended-regexp

Interpreta PATTERN come un'espressione regolare estesa (vedi sotto).

-e PATTERN, --regexp = PATTERN

Usa PATTERN come modello; utile per proteggere i modelli che iniziano con -

La spiegazione sopra non ha senso per me.

Quindi, qualcuno può spiegarmelo usando examplesqual è la differenza tra i due e quando usare quale opzione.

PS: Versione: grep (GNU grep) 2.10



3
Lo scopo -eè davvero solo di chiarire le ambiguità quando una regex inizia con un trattino. Quindi grep ---foounrecognized option: ---fooma puoi dire grep -e ---fooa grep per l'espressione regolare ---foo.
Tripleee,

Risposte:


29

-eè strettamente la bandiera per indicare il modello con cui si desidera abbinare. -Econtrolla se è necessario sfuggire a determinati caratteri speciali.

man greplo spiega -Eun po 'di più:

   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.

2
quindi questo è il motivo per cui non echo "hello" | grep -o -e 'h|l'ottengo output perché ho |perso il suo significato speciale e quando lo faccio echo "hello" | grep -o -E 'h|l'ottengo l'output desiderato.

2
Sì. echo "hello" | grep -o -e 'h' -e 'l'funzionerà se si desidera gettare -Evia in questo caso.
hafichuk,

3
grep -e -o 'h|l'corrisponderà letteralmente h|lmentre grep -e -o 'h\|l'corrisponderà ho le con -E è il contrario
Nahuel Fouilleul,

@ronnie è un peccato che tu abbia bisogno di oltre 200 reputazione per avere quella "caratteristica" che ti segue tra i siti SE ...
hafichuk

5

grep -ePermette anche di usare diverse stringhe per la ricerca: 'grep -e 'abc' -e 'def' -e '123'cercherà tutte e tre queste stringhe: abccosì come defe 123.

Questo funziona abbastanza simile a grep 'abc\|def\|123'cui \|sta per orma potrebbe essere un po 'più chiaro da leggere.

Dato che i fatti più importanti grep -Esono già spiegati qui, voglio solo aggiungere ciò che ho riassunto su questo argomento su una domanda abbastanza simile: Espressione regolare per trovare doppi personaggi in Bash


3

vedi sotto

/ esteso

grep comprende tre diverse versioni della sintassi delle espressioni regolari: "base", "estesa" e "perl". In GNU grep, non vi è alcuna differenza nella funzionalità disponibile tra sintassi base ed estesa. In altre implementazioni, le espressioni regolari di base sono meno potenti. La seguente descrizione si applica alle espressioni regolari estese; le differenze per le espressioni regolari di base sono riassunte in seguito. Le espressioni regolari Perl offrono funzionalità aggiuntive e sono documentate in pcresyntax (3) e pcrepattern (3), ma potrebbero non essere disponibili su tutti i sistemi.

Quindi, ancora una volta.

In GNU grep, non vi è alcuna differenza nelle funzionalità disponibili tra sintassi di base ed estese


2
la funzionalità è la stessa tra base ed estesa ma la sintassi è leggermente diversa. REGEXP caratteri speciali come (, ), |ecc bisogno di essere backslash escape di avere il loro significato speciale in espressioni regolari di base, ma non in esteso (dove hanno bisogno di essere sfuggito di essere trattati come un letterale stringa)
cas

1

Solo per elaborare l' -eopzione. -eè spesso facoltativo:

grep PATTERN

è identico a

grep -e PATTERN

a meno che, come indicato in una risposta precedente e nelle pagine man, vi siano più schemi di ricerca o per proteggere un motivo che inizia con un trattino (-).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.