Egrep-komento kuuluu grep-komennon perheeseen, jota käytetään kuvioiden etsimiseen Linuxissa. Jos olet käyttänyt grep-komentoa, egrep toimii samalla tavalla kuin grep -E (grep Extended regex’). Egrep skannaa tietyn tiedoston rivi riviltä ja tulostaa rivin tai rivit, jotka sisältävät hakujonon/säännöllisen lausekkeen. Tässä artikkelissa kerromme 15 hyödyllistä esimerkkiä egrep-komennoista, jotka auttavat aloittelijoita ja jopa asiantuntijoita suorittamaan mielekkäitä hakuja LinuxissaOlemme suorittaneet nämä esimerkit Debian 10 Buster -järjestelmässä, mutta ne voidaan helposti toistaa useimmilla Linux-distroilla.

Esimerkki 1: Tietyn merkkijonon etsiminen tiedostosta

Tämä on egrep-komennon yleisin käyttö. Tehdään niin, että määritetään merkkijono, jota halutaan etsiä, ja tiedoston nimi, josta halutaan etsiä kyseistä merkkijonoa. Tuloksena näytetään sitten koko rivi, joka sisältää haetun merkkijonon.

Syntaksi:

$ egrep ”haku_merkkijono” tiedostonimi

Esimerkki:

$ egrep debian esimerkkitiedostotiedosto.txt

Tässä esimerkissä etsin sanaa ”debian” määritellystä tekstitiedostosta. Näet, kuinka tuloksissa näkyy koko rivi, joka sisältää sanan ”debian”:

Esimerkki 2: Tietyn merkkijonon etsiminen useista tiedostoista

Komennolla egrep voit etsiä merkkijonoa useista samassa hakemistossa sijaitsevista tiedostoista. Sinun täytyy vain olla hieman tarkempi antaessasi ”kuvion” etsittäville tiedostoille. Tämä selviää paremmin esimerkin avulla, jonka esittelemme.

Syntaksi:

$ egrep ”search_string” filename_pattern

Esimerkki:

Tässä etsimme sanaa ”debian” kaikista .txt-tiedostoista määrittämällä tiedostonimikuvio seuraavasti:

$ egrep ”debian” *.txt

Komento on tulostanut kaikki rivit sekä tiedostonimet, jotka sisältävät sanan ”debian” kaikista nykyisessä hakemistossa olevista .txt-tiedostoista.

Esimerkki 3: Merkkijonon hakeminen rekursiivisesti koko hakemistosta

Kun haluat etsiä merkkijonoa kaikista hakemiston ja sen alihakemistojen tiedostoista, voit tehdä sen käyttämällä -r-lippua egrep-komennon kanssa.

Syntaksi:

$ egrep -r ”haku_merkkijono” *

Esimerkki:

Tässä esimerkissä etsin sanaa ”sample” koko nykyisen(Downloads) hakemiston tiedostoista.

$ egrep -r ”sample” *

Tulokset sisältävät kaikki rivit sekä tiedostonimet, jotka sisältävät sanan ”sample” kaikista Downloads-hakemiston ja sen alihakemistojen tiedostoista.

Esimerkki 4: Isot ja pienet kirjaimet huomioimattoman haun suorittaminen

Lipukkeen -i avulla voit käyttää egrep-komentoa tulostamaan hakujonoon perustuvat tulokset ilman, että sinun tarvitsee huolehtia sen isoista ja pienistä kirjaimista.

Syntaksi:

$ egrep -i ”haku_merkkijono” tiedostonimi

Esimerkki:

Tässä haen sanaa ”debian” ja haluan, että tuloksissa näytetään kaikki tiedoston rivit, jotka sisältävät sanan ”debian” tai ”Debian”, riippumatta sen isosta ja pienestä kirjaimesta.

$ egrep -i ”search_string” filename

Voit nähdä, miten -i-lippu auttoi minua hakemaan kaikki hakujonon sisältävät rivit hakusanalla, joka ei ota huomioon isoja ja pieniä kirjaimia.

Esimerkki 5: Merkkijonon etsiminen koko sanana eikä osajonona

Kun normaalisti haet merkkijonoa egrepin avulla, se tulostaa kaikki sanat, jotka sisältävät merkkijonon osajonona. Esimerkiksi merkkijonon ”on” etsiminen tulostaa kaikki sanat, jotka sisältävät merkkijonon ”on”, kuten ” on”, ”only”, ”monitor”, ”clone” jne. Jos haluat, että tulokset näyttävät vain sanan ”on” koko sanana eikä osajonona, voit käyttää -w-lippua egrepin kanssa.

Syntaksi:

$ egrep -w ”haku_merkkijono” tiedostonimi

Esimerkki:

Tässä haen merkkijonoa ”on” esimerkkitiedostosta:

$ egrep -i ”on” esimerkkitiedosto.txt

Yllä olevasta tulosteesta näet, että se sisältää myös sanan ”vain”. En kuitenkaan halua tätä, sillä etsin yksinomaan sanaa ”on”. Käytän siis sen sijaan tätä komentoa:

$ egrep -iw ”on” samplefile.txt

Nyt hakutulokseni sisältävät vain ne rivit, jotka sisältävät sanan ”on” kokonaisena sanana.

Esimerkki 6: Vain merkkijonon sisältävien tiedostonimien tulostaminen

Joskus haluamme hakea vain ne tiedostonimet, jotka sisältävät tietyn merkkijonon, sen sijaan, että tulostaisimme sen sisältävät rivit. Tämä voidaan tehdä käyttämällä egrep-komennon -l (pieni L) -lippua.

Syntaksi:

$ egrep -l ”search_string” filename_pattern

Esimerkki:

Tässä haen merkkijonoa ”sample” kaikista nykyisen hakemiston .txt-tiedostoista:

$ egrep -l sample *.txt

Haun tuloksena tulostuu vain niiden tiedostojen nimet, jotka sisältävät määritetyn merkkijonon.

Esimerkki 7: Vain hakujonon tulostaminen tiedostosta

Hakujonon sisältävän koko rivin tulostamisen sijaan voit käyttää egrep-komentoa tulostamaan itse merkkijonon. Merkkijono tulostetaan sen verran, kuinka monta kertaa se esiintyy määritetyssä tiedostossa.

Syntaksi:

$ egrep -o ”haku_merkkijono” tiedostonimi

Esimerkki:

Tässä esimerkissä etsin tiedostostani sanaa ”Tämä”.

$ egrep -o Tämä näytetiedosto_.txt

Huomautus: Tämä komennon käyttö on kätevää, kun etsit merkkijonoa säännöllisen lausekkeen mallin perusteella. Selitämme säännölliset lausekkeet yksityiskohtaisesti jossakin tulevista esimerkeistä.

Esimerkki 8: n rivimäärän näyttäminen ennen hakujonoa, sen jälkeen tai sen ympärillä

Joskus on hyvin tärkeää tietää, missä yhteydessä tiedostossa käytetään tiettyä merkkijonoa. egrep on siinä mielessä kätevä, että sen avulla voidaan näyttää hakujonon sisältävä rivi sekä tietty määrä rivejä sitä ennen, sen jälkeen ja sen ympärillä.

Tämä on esimerkkitekstitiedosto, jota käytän tulevien esimerkkien selittämiseen:

N rivimäärää hakujonon jälkeen:

Käyttämällä A-lippua seuraavalla tavalla saadaan näkyviin hakujonon sisältävä rivi ja N määrä rivejä sen jälkeen:

$ egrep -A <N> ”hakujono” tiedostonimi

Esimerkki:

$ egrep -A 2 ”näyte” näytetiedosto.txt

N määrä rivejä Ennen hakujonoa:

Käyttämällä B-lippua seuraavalla tavalla saadaan näkyviin hakujonon sisältävä rivi ja N määrä rivejä sitä ennen:

$ egrep -B <N> ”hakujono” tiedostonimi

Esimerkki:

$ egrep -B 2 ”näyte” samplefile.txt

N rivimäärää Ennen hakujonoa:

Käyttämällä C-lippua seuraavalla tavalla saadaan näkyviin hakujonon sisältävä rivi ja N rivimäärää rivejä ennen ja jälkeen sen:

$ egrep -C <N> ”hakujono” tiedostonimi

Esimerkki:

$ egrep -C 2 ”näyte” samplefile.txt

Esimerkki 9: Säännöllisten lausekkeiden täsmäyttäminen tiedostoissa

Egrep-komennosta tulee entistä tehokkaampi, kun etsit tiedostosta säännöllisten lausekkeiden sijaan kiinteitä hakujonoja.

Syntaksi:

$ egrep ”RegularExpressions” tiedostonimi

Kerrotaan, miten voit käyttää säännöllisiä lausekkeita egrep-haussa:

toisto-operaattori Käytä
? Edellinen kohde ennen ? on valinnainen ja sitä sovitetaan enintään kerran
* Edeltävää kohtaa ennen * sovitetaan nolla tai useampia kertoja
+ Edeltävä kohde ennen +:a sovitetaan yhteen tai useampaan kertaan
{n} Edeltävä kohde sovitetaan täsmälleen n kertaa.
{n,} Edellinen kohde täsmää vähintään n kertaa
{,m} Edellinen kohde täsmää enintään m kertaa
{n,m} Edeltävää kohdetta vastaa vähintään n kertaa mutta enintään m kertaa

Esimerkki:

Seuraavassa esimerkissä sovitetaan yhteen rivit, jotka sisältävät seuraavan lausekkeen:

alkaen ”Gnome” ja päättyen ” ohjelmat”

Esimerkki 10: Hakujonon korostaminen

Kun asetat GREP_OPTIONS-ympäristömuuttujan alla esitetyllä tavalla, saat tulosteen, jossa hakujono/kuvio on korostettu tuloksissa:

$ sudo export GREP_OPTIONS=’–color=auto’ GREP_COLOR=’100;8′

Voit sitten hakea merkkijonoa millä tahansa tavalla, jonka olemme kuvanneet tämän artikkelin esimerkeissä.

Esimerkki 11: Inverttihaun suorittaminen tiedostossa

Inverttihaulla tarkoitamme sitä, että egrep-komento tulostaa tiedostosta kaiken muun paitsi ne rivit, jotka sisältävät hakujonon. Käytämme seuraavaa esimerkkitiedostoa selittääksemme inverttihaun egrepin avulla. Olemme tulostaneet tiedoston sisällön cat-komennolla:

Syntaksi:

$ egrep -v ”hakujono” tiedostonimi

Esimerkki:

Mainitsemastamme esimerkkitiedostosta haluamme jättää tulosteesta pois rivin, joka sisältää sanan ”kaksi”, joten käytämme seuraavaa komentoa:

$ egrep -v ”kaksi” samplefile_.txt

Voit nähdä, kuinka tuloste sisältää kaiken esimerkkitiedostosta lukuun ottamatta toista riviä, joka sisälsi hakujonon ”two”.

Esimerkki 12: Käänteisen haun suorittaminen useiden kriteerien/hakukuvion perusteella

-v-lippulauseen avulla egrep-komennon voi myös saada suorittamaan käänteisen haun useampien hakujonojen/hakukuvion perusteella. filename

Esimerkki:

Mainitsemastamme esimerkkitiedostosta haluamme jättää tulosteesta pois rivin tai rivit, jotka sisältävät sanat ”one” ja ”two”, joten käytämme seuraavaa komentoa:

$ egrep -v -e ”one” -e ”two” samplefile_.txt

Olimme antaneet kaksi sanaa jätettäväksi pois -e-lippulauseen avulla, joten tuloste näyttää seuraavalta:

Esimerkki 13: Hakusanaa vastaavien rivien lukumäärän tulostaminen

Sen sijaan, että tulostaisit tiedostosta etsityn merkkijonon tai sen sisältämät rivit, voit egrep-komennolla laskea ja tulostaa merkkijonoa vastaavien rivien lukumäärän. Tämä luku voidaan hakea käyttämällä egrep-komennon -c-lippua.

Syntaksi:

$ egrep -c ”haku_merkkijono” tiedostonimi

Esimerkki:

Tässä esimerkissä käytämme -c-lippua laskeaksemme niiden rivien määrän, jotka sisältävät sanan ”Tämä” esimerkkitiedostossamme:

$ egrep -c ”This” filename

Voit käyttää tässä myös käänteishakuominaisuutta laskea ja tulostaa niiden rivien määrän, jotka eivät sisällä hakusanaa:

$ grep -v -c ”haku_merkkijono” tiedostonimi

Esimerkki 14: Rivinumeron näyttäminen, jossa merkkijono osuu kohdalleen

Lipukkeella -n voit saada egrep-komennon tulostamaan osuneen rivin sekä rivinumeron, joka sisältää hakujonon.

Syntaksi:

$ grep -n ”haku_merkkijono” tiedostonimi

Esimerkki:

$ grep -n ”Tämä” näytetiedosto_.txt

Voit nähdä, miten rivinumerot näytetään hakutuloksia vastaan.

Esimerkki 15: Paikan näyttäminen tiedostossa, johon hakujono täsmää

Jos haluat tietää paikan tiedostossa, jossa hakujono esiintyy, voit käyttää -b-lippua egrep-komennon kanssa.

$ grep -o -b ”hakusana_merkkijono” tiedostonimi

Esimerkki:

$ grep -o -b ”Tämä” näytetiedosto_.txt

Haun tuloksena tulostuu tiedoston tavuoffset-tietue, jossa hakusana on olemassa. egrep-komennon yksityiskohtainen käyttö. Käyttämällä tässä artikkelissa selitettyjen lippujen yhdistelmää voit tehdä mielekkäämpiä ja monimutkaisempia hakuja tiedostoihisi.

Vastaa

Sähköpostiosoitettasi ei julkaista.