egrep: mga halimbawa ng utos sa GNU / Linux

egrep

grep ito ay isa sa mga pinaka ginagamit na tool sa linya ng utos ng GNU / Linux. Sa kabila ng pagiging isang napaka-simpleng tool, pinapayagan kang magsagawa ng isang malaking bilang ng mga operasyon. Ginagamit ito lalo na kasabay ng mga tubo, upang makahanap ng mga tiyak na puntos sa output ng isang nakaraang utos, atbp. Ngunit mayroon ding isang tool na kilala bilang egrep na katumbas ng pagpapatakbo ng grep sa pagpipiliang -E.

Ang e ay nagmula sa "Extended regex", na kung saan ay kung saan aktibo ang pagpipiliang -E at kung ano ang mayroon ka sa egrep bilang default nang hindi ginagamit ang opsyong iyon. Iyon ay, maaari mong gamitin ang pinalawig na regular na expression. Sa tutorial na ito hindi ako magpapaliwanag kung ano ang mga regular na expression, kung paano ito magagamit at kung anong mga uri ang nasa * nix. Magpapakita lamang ako ng mga praktikal na halimbawa ng ilang mga kapaki-pakinabang na bagay na maaari mong gawin sa egrep ...

ang grep, egrep, at fgrep ay magkatulad. Sa katunayan, ang egrep ay katumbas ng grep -E at ang fgrep ay katumbas ng grep -F. Iyon ay, sa kaso na may kinalaman sa amin, bibigyan din nito ang kahulugan ng mga pattern bilang regular na mga expression.

Mo maghanap para sa isang linya o salita sa isa o higit pang mga file, tulad ng kaso sa grep. Halimbawa, ipagpalagay na nais mong maghanap para sa salitang ubuntu sa isang file na tinatawag na snap.txt at din sa lahat ng mga .txt file sa kasalukuyang direktoryo:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Ang paghahanap ay maaari ding maging recursive Upang maghanap sa buong nilalaman ng kasalukuyang direktoryo:

egrep -r "hola mundo" *

Sa ngayon, ang eksaktong mga salita o string ay hinanap, iyon ay, isinasaalang-alang ang pang-itaas at mas mababang kaso (case-sensitive), ngunit kung nais mong gawin ito sa case-insensitive mode, hindi mahalaga kung ang mga ito ay malaki o maliit, maaari mong gamitin ang sumusunod (kung idagdag mo ito ay kumpletong mga tugma lamang ang nakikita):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Ipakita, hindi ang mga pagkakataon, ngunit ang mga filename kung saan natagpuan ang mga laban na iyon:

egrep -l hola *.txt

Ipakita lamang ang pattern o salita hinanap sa loob ng isang dokumento:

egrep -o printf hola.c

Tandaan na maaari mong gamitin ang lahat ng mga posibilidad na maiisip mo. Maaari mong pagsamahin ang ilan sa mga pagpipilian na dati nang nakita, o maaari mong umakma sa kanila ng iba pang mga pagpipilian tulad ng -A n at -B n, kung saan n ang bilang ng mga linya na nais mong ipakita bago (Bago) at pagkatapos ng (Pagkatapos) ng laban o pareho nang sabay (C), upang makita mo kung ano ang pumapaligid sa laban:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Pigilan ang mga linya na naglalaman ng isang tugma at ipakita lamang ang mga hindi tumutugma:

egrep -v "dos" números.doc

O kung gusto mo, maaari mong gamitin maraming salita o tugma sa -e. Halimbawa:

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

Kung gumagamit ka -c mabibilang lamang ang bilang ng mga tugma, o baligtarin ito ng -v upang maipakita ang bilang ng mga hindi tugma na linya. Halimbawa:

egrep -c "include" main.c

egrep -v -c "include" main.c

At kahit na ipakita ang numero ng linya kung saan naganap ang laban, at pati na rin ang posisyon na sinasakop nito ayon sa pagkakabanggit:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

At kasama ang regular na expression ang mga kakayahan nito ay maaaring mapalawak. Halimbawa, maghanap ng isang linya na nagsisimula sa Kamusta at nagtatapos sa pamamagitan ng bye, o na nagsisimula sa Kamusta na sinusundan ng anupaman at pagkatapos ay ang laban ng bye ay lilitaw ayon sa pagkakabanggit:

* Pagwawasto ng sumusunod na utos: salamat sa komento ng mambabasa na si Manuel Alcocer nagawa kong baguhin ang sumusunod na utos, dahil nagkaroon ng isang error.

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

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

Ngunit kung nagtataka ka tungkol sa pagkakaiba sa grep, narito ang isang halimbawa na lilinawin ... Sa kaso ng paggamit ng grep nang walang -E dapat mong gamitin ang makatakas na mga pagkakasunud-sunod nang sa gayon ay binibigyang kahulugan nito ang mga espesyal na character tulad ng sa kabilang banda, kung hindi ay bibigyan nito ng kahulugan ang pattern nang hindi isinasaalang-alang sila. Sa kabilang banda, kasama ang egrep o grep -E isasaalang-alang ang mga ito. Halimbawa:
grep '^no\(fork\|group\)' /etc/group

Ito ay katumbas ng:

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

Iyon ay, hahanapin nito ang mga katugmang linya na nagsisimula sa nofork o nogroup. Ngunit kung ginamit mo ang unang expression ng grep nang walang mga pagkakasunud-sunod na makatakas, kung ano ang gagawin nito ay ang paghahanap ang konkretong pattern hindi (tinidor | grupo):

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

Maaari ka ring maghanap mga saklaw ng alphanumeric, o tukoy na mga halaga, tulad ng upang makahanap ng ilang mga IP:
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

Kung gusto mo, maaari kang gumamit ng iba pang mga regular na expression upang gumawa ng mas tiyak na mga paghahanap. Halimbawa | upang makahanap ng isa nagkataon o iba pa:

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

Maaari mo ring hanapin malalaki, maliit na letra, alpabetikong mga character lamang, o alphanumeric, atbp., gamit ang iba pang mga expression tulad ng: [: alnum:], [: alpha:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [ : itaas:], atbp. Halimbawa, upang maghanap para sa uppercase:
egrep [[:upper:]] diccioario

Inaasahan kong makakatulong ito sa iyo ... Malapit na ay ipaliwanag ko ang mga regular na expression sa isang artikulo na partikular na nakatuon dito ...


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Larawan ng placeholder ni Manuel Alcocer dijo

    Magandang hapon.

    Ilang mga puna ...

    Ipinapaliwanag mo ang utos na 'egrep' ngunit huwag ilagay ang pagkakaiba sa pagitan ng 'egrep' at 'grep', na dapat ay narito.

    Por ejemplo:
    Sa grep: ip -4 a | grep '[0-9] \ +'
    Gamit ang egrep: ip -4 a | egrep '[0-9] +'

    Ahh, at mali ito, 'egrep "Hello. * Bye" example.txt'; ang tagumpay dito ay nangyayari kapag mayroong isang linya sa file na naglalaman ng string na 'Hello' na sinusundan ng kung ano at sinusundan ng 'paalam', ang linya ay maaaring magsimula at magtapos sa kung anupaman.

    Ito ang sasabihin ng artikulo:
    egrep '^ Hello. * bye $' halimbawa.txt

    At lahat ng mga pagpipilian, o halos lahat (hindi ako titigil upang suriin ito), ay mga pagpipilian ng 'grep' hindi ng 'egrep' eksklusibo.

    Lubos na bumabati.

    1.    Isaac dijo

      Salamat sa pag-uulat ng error na iyon. Kung ano ang iyong puna sa mga regular na expression, inilagay ko na ito sa ikalawang talata. Magtatalaga ako ng isang tukoy na artikulo sa kanila, dahil maraming at ang artikulong ito ay magtatagal. Isang pagbati!

      1.    Larawan ng placeholder ni Manuel Alcocer dijo

        Kumusta ulit, Isaac.

        Sa pangalawang talata karaniwang sinasabi mo, o dapat ay sinabi mo, na ang "egrep" ay isang alias ng 'grep -E', ngunit hindi ka nagbibigay ng anumang halimbawa ng paggamit ng 'egrep' na may ilang regular na expression na nakasulat nang naiiba kaysa sa kung kailan ginamit ng 'grep'.

        Ang pagtatalaga ng isang artikulo upang ipaliwanag ang pinalawig na regular na mga expression ay tila matapang sa akin, bukod sa iba pang mga bagay dahil may mga site na tulad nito na hindi nag-a-advertise at gumagawa ng napakahalagang gawaing pang-impormasyon para sa komunidad ng GNU: https://www.rexegg.com/

        Hindi ako nagsusulat dito para sa trolling, ang hangarin ko sa lahat ng ito ay kung may magbasa ng entry na ito upang makita kung ano ang ginagawa ng 'egrep' o 'grep', mangyaring tingnan ang iba pang mga mapagkukunan, ang entry na ito ay hindi maaaring maging sanggunian sa anuman, ipinaliwanag nito kaunti, masama, nag-aalok ng labis na impormasyon at maaaring nakakalito, lalo na para sa mga walang kaalaman sa GNU at mga malalakas na tool na inaalok nito.

        Sa wakas, naidagdag at naayos mo ang bug na ipinahiwatig ko pagkatapos ng aking unang komento (^ $). Tulad ng sa iba pang mga site, dapat ay nabanggit mo ang taong gumawa ng pagwawasto, o sabihing ito ay isang pagwawasto, na bahagi ng base ng GNU, ang parehong batayan kung saan nagsimula ang blog na ito at nawala.

        Isang pagbati.

        1.    Isaac dijo

          Salamat sa iyong pananaw.

  2.   fsafs dijo

    FFsaf