egrep: esimerkkejä komennosta GNU / Linuxissa

egrep

grep se on yksi GNU / Linux-komentorivin eniten käytetyistä työkaluista. Huolimatta siitä, että se on hyvin yksinkertainen työkalu, sen avulla voit suorittaa suuren määrän toimintoja. Sitä käytetään erityisesti putkien yhteydessä, jotta voidaan löytää tiettyjä pisteitä edellisen komennon jne. Mutta on myös työkalu, joka tunnetaan nimellä egrep, joka vastaa grepin suorittamista -E-vaihtoehdolla.

E tulee "Laajennetusta lausekkeesta", mikä aktivoi -E -vaihtoehdon ja mikä olet oletusarvoisesti egrepissä käyttämättä kyseistä vaihtoehtoa. Eli voit käyttää laajennetut säännölliset lausekkeet. Tässä opetusohjelmassa en aio selittää, mitkä säännölliset lausekkeet ovat, miten niitä voidaan käyttää ja mitkä tyypit ovat * nixissä. Näytän vain käytännön esimerkkejä hyödyllisistä asioista, joita voit tehdä egrepillä ...

grep, egrep ja fgrep ovat samanlaisia. Itse asiassa egrep vastaa grep -E: tä ja fgrep vastaa grep -F: ää. Eli meitä koskevassa tapauksessa se tulkitsee mallit myös säännöllisinä lausekkeina.

Sinä etsi rivi tai sana yhdessä tai useammassa tiedostossa, kuten myös grepissä. Kuvittele esimerkiksi, että haluat etsiä sanaa ubuntu tiedostosta nimeltä snap.txt ja myös kaikista nykyisen hakemiston .txt-tiedostoista:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Haku voi olla myös rekursiivinen Hae nykyisen hakemiston koko sisältö:

egrep -r "hola mundo" *

Toistaiseksi on haettu tarkkoja sanoja tai merkkijonoja, eli ottaen huomioon isot ja pienet kirjaimet (kirjainkoko on merkitsevä), mutta jos haluat tehdä sen kirjainkoon ulkopuolella, riippumatta siitä, ovatko ne isoja vai pieniä, voit käyttää seuraavaa (jos lisäät w: n, se löytää vain täydelliset ottelut):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Näytä, ei sattumia, mutta tiedostonimet, joista kyseiset osumat löytyivät:

egrep -l hola *.txt

Näytä vain kuvio tai sana haettu asiakirjassa:

egrep -o printf hola.c

Muista, että voit käyttää kaikkia mahdollisia mahdollisuuksiasi. Voit yhdistää useita aiemmin nähtyjä vaihtoehtoja tai täydentää niitä muilla vaihtoehdoilla, kuten -A n ja -B n, missä n rivien määrä, jonka haluat näyttää ennen (ennen) ja sen jälkeen (jälkeen) ottelun tai molemmat samanaikaisesti (C), jotta näet, mikä ottelua ympäröi:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Hylkää rivit, joissa on osuma, ja näytä vain ne, jotka eivät vastaa

egrep -v "dos" números.doc

Tai jos haluat, voit käyttää useita sanoja tai vastaa -e: tä. Esimerkiksi:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

Jos käytät -c voi laskea vain otteluiden määräntai käännä se -v: llä osoittamaan ristiriitaisia ​​viivoja. Esimerkiksi:

egrep -c "include" main.c

egrep -v -c "include" main.c

Ja jopa näytä rivinumero missä ottelu on tapahtunut, ja myös sen sijainti:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Ja yhdessä säännölliset lausekkeet sen ominaisuuksia voidaan laajentaa. Etsi esimerkiksi rivi, joka alkaa Hellolla ja päättyy hei, tai joka alkaa Hellolla, jota seuraa mitä tahansa, ja sitten vastaavuorot tulevat vastaavasti:

* Seuraavan komennon korjaus: lukijan Manuel Alcocerin kommentin ansiosta olen voinut muokata seuraavaa komentoa, koska siinä oli virhe.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

Mutta jos mietit eroa grepin kanssa, tässä on esimerkki, joka tekee siitä selvän sinulle ... Jos käytät grepiä ilman -E, sinun on käytettävä paeta sekvenssejä niin, että se tulkitsee erikoismerkit sellaisenaan, muuten se tulkitsisi mallin sellaisenaan ottamatta niitä huomioon. Toisaalta egrepillä tai grep -E: llä se ottaa ne huomioon. Esimerkiksi:
grep '^no\(fork\|group\)' /etc/group

Se vastaisi:

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

Toisin sanoen se etsii vastaavat linjat, jotka alkavat noforkista tai noryhmästä. Mutta jos käytit grepin ensimmäistä lauseketta ilman pakosarjoja, se tekisi etsinnän betonikuvio ei (haarukka | ryhmä):

grep 'no(fork|group)' /etc/group

Voit myös etsiä aakkosnumeeriset alueettai tiettyjä arvoja, esimerkiksi tiettyjen IP-osoitteiden löytämiseksi:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

Halutessasi voit käyttää muita säännöllisiä lausekkeita tarkempien hakujen tekemiseen. Esimerkiksi | löytää yksi sattuma tai toinen:

egrep -i '^(printf|scanf)' hola.c

Voit jopa etsiä isot, pienet, vain aakkoset tai aakkosnumeeriset jne., käyttämällä muita lausekkeita, kuten: [: alnum:], [: alfa:], [: numero:], [: alempi:], [: tulosta:], [: punct:], [: välilyönti:], [ : ylempi:] jne. Esimerkiksi, jos haluat etsiä isoja kirjaimia:
egrep [[:upper:]] diccioario

Toivon, että se auttaa sinua ... Pian selitän säännölliset lausekkeet sille omistetussa artikkelissa ...


Jätä kommentti

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

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   Manuel Alcocerin paikkamerkki dijo

    Hyvää päivää.

    Muutama huomautus ...

    Selität 'egrep' -komennon, mutta älä laita eroa 'egrep' ja 'grep' välillä, minkä pitäisi olla mitä se täällä on.

    Esimerkiksi:
    Grep-sovelluksella: ip -4 a | grep '[0-9] \ +'
    Kanssa egrep: ip -4 a | egrep '[0-9] +'

    Ahh, ja tämä on väärin, 'egrep "Hei. * Hei" example.txt "; Menestys tapahtuu, kun tiedostossa on rivi, joka sisältää merkkijonon "Hello", jota seuraa mitä tahansa ja jota seuraa "goodbye", rivi voi todella alkaa ja päättyä millä tahansa.

    Tämä olisi mitä artikkelissa sanotaan:
    egrep '^ Hei. * hei $' esimerkki.txt

    Ja kaikki vaihtoehdot tai melkein kaikki (en pysähdy tarkistamaan sitä) ovat vaihtoehtoja 'grep', ei yksinomaan 'egrep'.

    Ystävällisin terveisin.

    1.    Isaac dijo

      Kiitos, että ilmoitit virheestä. Mitä kommentoit säännöllisiin lausekkeisiin, laitoin sen jo toiseen kohtaan. Omistan heille tietyn artikkelin, koska niitä on paljon ja tämä vie liian kauan. Tervehdys!

      1.    Manuel Alcocerin paikkamerkki dijo

        Hei taas, Isaac.

        Toisessa kappaleessa sanot, tai sinun olisi pitänyt sanoa, että 'egrep' on aliaksen 'grep -E': lle, mutta et anna mitään esimerkkiä 'egrepin' käytöstä säännöllisen lausekkeen kanssa, joka on kirjoitettu eri tavalla kuin käyttää 'grep'.

        Artikkelin omistaminen laajennettujen säännöllisten lausekkeiden selittämiseksi tuntuu minulle rohkealta muun muassa siksi, että on tällaisia ​​sivustoja, jotka eivät mainosta ja tekevät erittäin tärkeää informaatiotyötä GNU-yhteisölle: https://www.rexegg.com/

        En kirjoita täällä uistelua varten, tarkoitukseni on, että jos joku lukee tämän merkinnän nähdäkseen, mitä egrep tai grep tekee, katso muita lähteitä, tämä merkintä ei voi olla viittaus mihinkään, siinä selitetään vähän, huonosti, tarjoaa tarpeetonta tietoa ja voi olla hämmentävää erityisesti niille, joilla ei ole tietoa GNU: sta ja sen tarjoamista tehokkaista työkaluista.

        Lopuksi olet lisännyt ja korjannut virheen, jonka ilmoitin ensimmäisen kommenttini jälkeen (^ $). Kuten muissakin sivustoissa, sinun on pitänyt mainita korjauksen tehnyt henkilö tai ainakin sanoa, että se on korjaus, joka on osa GNU-tukikohtaa, samaa tukikohdaa, jolla tämä blogi aloitettiin ja on kadonnut.

        Tervehdys.

        1.    Isaac dijo

          Kiitos näkökulmastasi.

  2.   fsafit dijo

    ffff