Próbuję zrozumieć różnicę między grep -e a grep -E. Teraz z grep manpage mam:

-E, –extended-regexp

Interpretuj WZORZEC jako rozszerzone wyrażenie regularne (zobacz poniżej).

-e WZÓR, –regexp = WZÓR

Użyj WZORCA jako wzorca; przydatne do ochrony wzorców zaczynających się od –

Powyższe wyjaśnienie nie ma dla mnie sensu.

Czy ktoś może to wyjaśnić ja używam examples jaka jest różnica między nimi i kiedy użyć której opcji.

PS: Wersja: grep (GNU grep) 2.10

Komentarze

  • Zobacz też: unix.stackexchange.com/questions/17949/…
  • Celem -e jest tak naprawdę tylko ujednoznacznienie, kiedy wyrażenie regularne zaczyna się od myślnika. Tak więc grep ---foo daje unrecognized option: ---foo, ale możesz powiedzieć grep -e ---foo, aby grepować dla wyrażenia regularnego ---foo.

Odpowiedź

-e jest ściśle flagą wskazującą wzorzec, do którego chcesz dopasować. -E określa, czy należy zmienić znaczenie niektórych znaków specjalnych.

man grep wyjaśnia -E to trochę więcej:

 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. 

Komentarze

  • więc to jest powód, dla którego Nie widzę echo "hello" | grep -o -e 'h|l' danych wyjściowych, ponieważ | straciło swoje specjalne znaczenie, a kiedy to zrobię echo "hello" | grep -o -E 'h|l' Otrzymuję żądane wyjście.
  • Tak. echo "hello" | grep -o -e 'h' -e 'l' zadziała, jeśli chcesz w tym przypadku wyrzucić -E.
  • będzie pasować dosłownie h|l, podczas gdy grep -e -o 'h\|l' będzie pasować do h lub l i -E it ' jest odwrotnie
  • @ronnie it ' na nieszczęście potrzebujesz ponad 200 punktów reputacji, aby " funkcja " śledziła Cię między witrynami SE …

Odpowiedź

Ponadto grep -e pozwala na użycie kilku ciągów znaków do wyszukiwania: "grep -e "abc" -e "def" -e "123" wyszuka dowolny z trzech z tych ciągów: abc oraz def i 123.

Działa podobnie do grep "abc\|def\|123", gdzie \| oznacza dla or ale c powinien być trochę jaśniejszy do przeczytania.

Ponieważ najważniejsze fakty dotyczące grep -E zostały już tutaj wyjaśnione, chcę tylko dodać to, co podsumowałem na ten temat na całkiem podobne pytanie: Wyrażenie regularne do znajdowania podwójnych znaków w Bash

Odpowiedź

patrz poniżej

/ rozszerzone

grep rozumie trzy różne wersje składni wyrażeń regularnych: „podstawowa”, „rozszerzona” i „perl”. W GNU grep nie ma różnicy w dostępnej funkcjonalności między podstawową i rozszerzoną składnią. W innych implementacjach podstawowe wyrażenia regularne są mniej wydajne. Poniższy opis dotyczy rozszerzonych wyrażeń regularnych; różnice dotyczące podstawowych wyrażeń regularnych są następnie podsumowane. Wyrażenia regularne Perla zapewniają dodatkową funkcjonalność i są udokumentowane w pcresyntax (3) i pcrepattern (3), ale mogą nie być dostępne w każdym systemie.

Więc , jeszcze raz.

W GNU grep nie ma różnicy w dostępnej funkcjonalności między podstawową i rozszerzoną składnią

Komentarze

  • funkcjonalność jest taka sama dla wersji podstawowej i rozszerzonej, ale składnia jest nieco inna. Znaki specjalne wyrażenia regularnego, takie jak (, ), | itp., należy zamienić ukośnikiem odwrotnym na mają swoje specjalne znaczenie w podstawowym wyrażeniu regularnym, ale nie w rozszerzonym (gdzie muszą zostać zmienione, aby były traktowane jako literał ciągu)

Odpowiedź

Aby bardziej szczegółowo omówić opcję -e. -e jest często opcjonalne:

grep PATTERN 

jest identyczne z

grep -e PATTERN 

chyba że, jak stwierdzono we wcześniejszej odpowiedzi i na stronach podręcznika, istnieje wiele wzorców wyszukiwania lub w celu ochrony wzorca zaczynającego się od łącznika (-).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *