Yritän ymmärtää eroa grep -e ja grep -E. Nyt osoitteesta grep manpage sain:

-E, –extended-regexp

Tulkitse PATTERN laajennettuna säännöllisenä lausekkeena (katso alla).

-e PATTERN, –regexp = PATTERN

Käytä mallina PATTERN; hyödyllinen suojaamaan kuvioita, jotka alkavat –

Yllä oleva selitys ei ole minulle järkevää.

Voiko joku siis selittää sen minä käytän examples mitä eroa on näiden kahden välillä ja milloin mitä vaihtoehtoa käytetään.

PS: Versio: grep (GNU grep) 2.10

Kommentit

  • Katso myös: unix.stackexchange.com/questions/17949/…
  • -e -kohdan tarkoitus on oikeastaan vain erottaa, kun regex alkaa viivalla. Joten grep ---foo antaa unrecognized option: ---foo, mutta voit sanoa, että grep -e ---foo tarttuu säännöllisen lausekkeen ---foo.

vastaus

-e on ehdottomasti lippu, joka osoittaa mallin, jota haluat sovittaa. -E hallitsee, tarvitseeko tiettyjä erikoismerkkejä välttää.

man grep selittää -E vähän enemmän:

 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. 

Kommentit

  • joten tämä on syy En echo "hello" | grep -o -e 'h|l' En saa tulosteita, koska | menetti erityis merkityksensä ja kun teen echo "hello" | grep -o -E 'h|l' Saan halutun tuloksen.
  • Kyllä. echo "hello" | grep -o -e 'h' -e 'l' toimii, jos haluat heittää -E tässä tapauksessa.
  • grep -e -o 'h|l' vastaa kirjaimellisesti h|l, kun taas grep -e -o 'h\|l' vastaa h tai l ja -E: n kanssa se ' s päinvastoin
  • @ronnie it ' s valitettavasti tarvitset yli 200 mainetta, jotta " -ominaisuus " seuraa sinua SE-sivustojen välillä …

Vastaus

Myös grep -e sallii useiden merkkijonojen käyttämisen hakuun: "grep -e "abc" -e "def" -e "123" etsii mitä tahansa näistä kolmesta merkkijonosta: abc sekä def ja 123.

Tämä toimii melko samankaltaisesti kuin grep "abc\|def\|123" missä \| on or, mutta c pitäisi olla hieman selkeämpi lukea.

Koska tärkeimmät tosiasiat aiheesta grep -E on jo selitetty, haluan vain lisätä, mitä olen tiivistänyt tästä aiheesta melko samankaltaiseen kysymykseen: Säännöllinen lauseke kaksoismerkkien löytämiseksi Bashista

Vastaa

katso alla

/ laajennettu

grep ymmärtää säännöllisen lausekkeen syntaksin kolme eri versiota: ”basic”, ”Extended” ja ”perl”. GNU grep -sovelluksessa käytettävissä olevien toimintojen välillä ei ole eroa perus- ja laajennettujen syntaksien välillä. Muissa toteutuksissa säännölliset peruslausekkeet ovat vähemmän tehokkaita. Seuraava kuvaus koskee laajennettuja säännöllisiä lausekkeita; Säännöllisten peruslausekkeiden erot on tiivistetty jälkeenpäin. Perlin säännölliset lausekkeet tarjoavat lisätoimintoja, ja ne dokumentoidaan PCresyntaxissa (3) ja pcrepatternissa (3), mutta ne eivät välttämättä ole käytettävissä kaikissa järjestelmissä.

Joten , vielä kerran.

GNU grepissä käytettävissä olevien toimintojen välillä ei ole eroa perus- ja laajennettujen syntaksien välillä.

Kommentit

  • toiminnallisuus on sama perus- ja laajennetun välillä, mutta syntaksissa on hieman eroja. regexp-erikoismerkit, kuten (, ), | jne., täytyy välttää taaksepäin. niillä on erityinen merkitys peruskirjassa, mutta ei laajennettuna (missä ne on vältettävä, jotta niitä voidaan käsitellä merkkijonon kirjaimina)

Vastaa

Vain -e -vaihtoehdon tarkentamiseksi. -e on usein valinnainen:

grep PATTERN 

on identtinen

grep -e PATTERN 

ellei, kuten aikaisemmassa vastauksessa ja man-sivuilla todetaan, on useita hakumalleja, tai jos haluat suojata yhdysmerkillä (-) alkavan kuvion.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *