Megpróbálom megérteni a különbséget grep -e és grep -E. Most grep manpage -től kaptam:

-E, –extended-regexp

Értelmezze a PATTERN-t kiterjesztett reguláris kifejezésként (lásd alább).

-e PATTERN, –regexp = PATTERN

A PATTERN-t használja mintaként; hasznos a –

mintákkal védeni – a fenti magyarázat nekem nincs értelme.

Tehát meg tudja magyarázni valaki nekem a examples használatával mi a különbség a kettő között, és mikor melyik opciót kell használni.

PS: Verzió: grep (GNU grep) 2.10

Megjegyzések

  • Lásd még: unix.stackexchange.com/questions/17949/…
  • A -e célja valójában csak az, hogy egyértelművé tegye, amikor a regex egy kötőjellel kezdődik. Tehát grep ---foo ad unrecognized option: ---foo, de mondhatja azt, hogy grep -e ---foo megkapja a ---foo.

Válasz

-e szigorúan az a zászló, amely jelzi azt a mintát, amellyel egyeztetni szeretne. A -E vezérli, hogy el kell-e menekülnie bizonyos speciális karakterek elől.

man grep elmagyarázza a -E még egy kicsit:

 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. 

megjegyzések

  • tehát ez az oka, amikor Teszek echo "hello" | grep -o -e 'h|l' nem kapok kimenetet, mert a | elvesztette különleges jelentését, és amikor én echo "hello" | grep -o -E 'h|l' Megkapom a kívánt kimenetet.
  • Igen. A echo "hello" | grep -o -e 'h' -e 'l' akkor működik, ha ebben az esetben el akarja dobni a -E -t.
  • szó szerint h|l, míg a grep -e -o 'h\|l' h vagy l és -E-vel ' s az ellenkezője
  • @ronnie it ' s sajnálatos, hogy legalább 200 hírnévre van szükséged ahhoz, hogy az " funkció " az SE webhelyek között kövessen …

Válasz

Szintén grep -e lehetővé teszi több karakterlánc használatát a kereséshez: "grep -e "abc" -e "def" -e "123" a következő három karakter bármelyikét megkeresi: abc, valamint def és 123.

Ez egészen hasonlóan működik, mint grep "abc\|def\|123", ahol \| áll mert or, de c kissé tisztábban kellene olvasni.

Mivel a grep -E legfontosabb tényei itt már kifejtésre kerültek, csak annyit szeretnék hozzáadni, amit összefoglaltam ebben a témában egy egészen hasonló kérdésre: Rendszeres kifejezés kettős karakterek kereséséhez a Bash-ban

Válasz

lásd alább

/ kiterjesztett

A grep a reguláris kifejezés szintaxisának három különböző változatát érti: „alap”, „kibővített” és „perl”. A GNU grep-ben nincs különbség az elérhető funkciók között az alapszintű és a kiterjesztett szintaxisok között. Más megvalósításokban az alapvető reguláris kifejezések kevésbé hatékonyak. Az alábbi leírás kiterjesztett reguláris kifejezésekre vonatkozik; Az alapszabályos kifejezések különbségeit utólag foglaljuk össze. A Perl reguláris kifejezések további funkcionalitást biztosítanak, és a pcresyntax (3) és a pcrepattern (3) dokumentációban vannak, de nem biztos, hogy minden rendszerben elérhetők.

Tehát , még egyszer.

A GNU grep-ben nincs különbség az alapvető és a kiterjesztett szintaxisok közötti rendelkezésre álló funkcionalitásban.

Megjegyzések

  • a funkcionalitás ugyanaz az alap és a kiterjesztett között, de a szintaxis kissé eltér. Az olyan speciális karaktereket, mint (, ), | stb., a különleges jelentéssel bírnak az alapvető regexp-ben, de nem kiterjesztve (ahol meg kell kerülni őket, hogy karakterláncként kezeljék őket)

Válasz

Csak a -e opció részletezéséhez. A -e gyakran nem kötelező:

grep PATTERN 

azonos a

grep -e PATTERN 

hacsak – amint azt egy korábbi Válasz és a man oldalak megemlítik – több keresési minta van, vagy ha kötőjellel (-) kezdődő mintát akarunk védeni.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük