Încerc să înțeleg diferența dintre grep -e și grep -E. Acum de la grep manpage am primit:

-E, –extended-regexp

Interpretează PATTERN ca o expresie regulată extinsă (vezi mai jos).

-e PATTERN, –regexp = PATTERN

Folosește PATTERN ca model; util pentru a proteja tiparele care încep cu –

Explicația de mai sus nu are sens pentru mine.

Deci, poate cineva să o explice eu folosind examples care este diferența dintre cele două și când se folosește opțiunea.

PS: Versiune: grep (GNU grep) 2.10

Comentarii

  • Vezi și: unix.stackexchange.com/questions/17949/…
  • Scopul -e este într-adevăr doar să dezambiguizeze atunci când o regex începe cu o liniuță. Deci, grep ---foo oferă unrecognized option: ---foo, dar puteți spune grep -e ---foo la grep pentru expresia regulată ---foo.

Răspuns

-e este strict steagul pentru indicarea modelului cu care doriți să se potrivească. -E controlează dacă trebuie să scapi de anumite caractere speciale.

man grep explică -E este un pic mai mult:

 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. 

Comentarii

  • deci acesta este motivul pentru care Nu echo "hello" | grep -o -e 'h|l' nu primesc nici o ieșire, deoarece | și-a pierdut semnificația specială și când echo "hello" | grep -o -E 'h|l' Obțin rezultatul dorit.
  • Da. echo "hello" | grep -o -e 'h' -e 'l' va funcționa dacă doriți să aruncați -E în acest caz.
  • grep -e -o 'h|l' se va potrivi literalmente h|l în timp ce grep -e -o 'h\|l' se va potrivi cu h sau l și cu -E ' este dimpotrivă
  • @ronnie it ' nefericit că ai nevoie de peste 200 de reputații pentru ca această funcție " " să te urmeze între site-urile SE …

Răspuns

De asemenea, grep -e permite utilizarea mai multor șiruri pentru căutare: "grep -e "abc" -e "def" -e "123" va căuta oricare dintre aceste trei șiruri: abc, precum și def și 123.

Acest lucru funcționează destul de similar cu grep "abc\|def\|123" unde \| pentru or dar c Ar trebui să fie puțin mai clar de citit.

Deoarece cele mai importante fapte de pe grep -E sunt deja explicate aici, vreau doar să adaug ceea ce am rezumat pe acest subiect la o întrebare destul de similară: Expresie regulată pentru găsirea de caractere duble în Bash

Răspuns

vezi mai jos

/ extins

grep înțelege trei versiuni diferite ale sintaxei expresiei regulate: „de bază”, „extins” și „perl”. În GNU grep, nu există nicio diferență în funcționalitatea disponibilă între sintaxele de bază și cele extinse. În alte implementări, expresiile regulate de bază sunt mai puțin puternice. Următoarea descriere se aplică expresiilor regulate extinse; diferențele pentru expresiile regulate de bază sunt rezumate ulterior. Expresiile regulate Perl oferă funcționalități suplimentare și sunt documentate în pcresyntax (3) și pcrepattern (3), dar este posibil să nu fie disponibile pe fiecare sistem.

Deci , încă o dată.

În GNU grep, nu există nicio diferență în funcționalitatea disponibilă între sintaxele de bază și cele extinse

Comentarii

  • funcționalitatea este aceeași între de bază și extins, dar sintaxa este ușor diferită. regexp caractere speciale precum (, ), | etc. trebuie să fie scăpate în au semnificația lor specială în regexp de bază, dar nu și în extins (unde trebuie scăpați pentru a fi tratați ca un șir literal)

Răspuns

Doar pentru a detalia opțiunea -e. -e este adesea opțional:

grep PATTERN 

este identic cu

grep -e PATTERN 

cu excepția cazului în care, așa cum sa menționat într-un răspuns anterior și în paginile manual, există mai multe modele de căutare sau pentru a proteja un model care începe cu o cratimă (-).

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *