Lyhyesti: Tässä oppaassa käsittelemme joitain käytännön esimerkkejä egrep-komennosta. Tämän oppaan noudattamisen jälkeen käyttäjät voivat suorittaa tekstihaun tehokkaammin Linuxissa.
Oletko koskaan ollut turhautunut, koska et löydä tarvittavia tietoja lokeista? Tarvittavien tietojen poimiminen suuresta tietojoukosta on monimutkainen ja aikaa vievä tehtävä.
Asiat muuttuvat todella haastaviksi, jos käyttöjärjestelmä ei tarjoa oikeita työkaluja ja Linux tulee pelastamaan sinut. Linux tarjoaa erilaisia tekstinsuodatusapuohjelmia, kuten awk, sed, leikata, jne.
Egrep on kuitenkin yksi tehokkaimmista ja yleisimmin käytetyistä apuohjelmista tekstinkäsittelyyn Linuxissa, ja aiomme keskustella joistakin esimerkeistä egrep komento.
The egrep -perhe tunnistaa komennon Linuxissa grep-komento, jota käytetään tiedostojen tietyn kuvion etsimiseen ja yhdistämiseen. Se toimii samalla tavalla kuin grep -E (grep Laajennettu regex), mutta se etsii useimmiten tietystä tiedostosta tai jopa riveistä riville tai tulostaa rivin tietyssä tiedostossa.
Kohteen syntaksi egrep komento on seuraava:
$ egrep [OPTIONS] KUVIOT [TIEDOSTOT]
Luodaan esimerkkitekstitiedosto, jossa on seuraava sisältö esimerkkiä varten:
$ cat sample.txt.
Täällä näemme, että tekstitiedosto on valmis. Keskustellaan nyt muutamasta yleisestä esimerkistä, joita voidaan käyttää päivittäin.
Aloitetaan yksinkertaisella mallinsovitusesimerkillä, jossa voimme käyttää alla olevaa komentoa merkkijonon etsimiseen ammattilainen
jonkin sisällä sample.txt tiedosto:
$ egrep professionals sample.txt.
Tässä näemme, että komento tulostaa rivin, joka sisältää määritetyn kuvion.
Voimme tehdä lähdöstä informatiivisemman korostamalla vastaavan kuvion. Tämän saavuttamiseksi voimme käyttää --väri
vaihtoehto egrep komento. Esimerkiksi alla oleva komento korostaa tekstin ammattilaisia
punaisella värillä:
$ egrep --color=auto ammattilaiset sample.txt.
Tässä voimme nähdä, että sama tulos on informatiivisempi kuin edellinen. Lisäksi voimme helposti tunnistaa tämän sanan ammattilaisia
toistetaan kaksi kertaa.
Useimmissa Linux-järjestelmissä yllä oleva asetus on oletusarvoisesti käytössä seuraavalla aliaksella:
$ alias egrep='egrep –color=auto'
The egrep komento hyväksyy useita tiedostoja argumenttina, mikä antaa meille mahdollisuuden etsiä tiettyä kuviota useista tiedostoista. Ymmärretään tämä esimerkin avulla.
Luo ensin kopio sample.txt tiedosto:
$ cp sample.txt sample-copy.txt.
Etsi nyt kuviota ammattilaisia
molemmissa tiedostoissa:
$ egrep professionals sample.txt sample-copy.txt
Yllä olevassa esimerkissä voimme nähdä tiedostonimen tulosteessa, joka edustaa vastaavaa riviä kyseisestä tiedostosta.
Joskus meidän on vain selvitettävä, onko kuvio tiedostossa vai ei. Jos kyllä, kuinka monella rivillä se on? Tällaisissa tapauksissa voimme käyttää -c
komennon vaihtoehto.
Esimerkiksi alla oleva komento tulee näkyviin 1 lähtönä, koska sana ammattilaisia
esiintyy vain yhdellä rivillä.
$ egrep -c ammattilaiset sample.txt 1
Edellisessä esimerkissä näimme, että -c
vaihtoehto ei laske kuvion esiintymien määrää. Esimerkiksi sana ammattilaisia
näkyy kaksi kertaa samalla rivillä, mutta -c
vaihtoehto käsittelee sitä vain yhtenä otteluna.
Tällaisissa tapauksissa voimme käyttää -o
komennon vaihtoehto tulostaa vain vastaava kuvio. Esimerkiksi alla oleva komento näyttää sanan ammattilaisia
kahdella erillisellä rivillä:
$ egrep -o ammattilaiset sample.txt.
Lasketaan nyt rivit käyttämällä wc-komento:
$ egrep -o ammattilaiset sample.txt | wc -l.
Yllä olevassa esimerkissä olemme käyttäneet yhdistelmää egrep ja WC komennot laskemaan tietyn kuvion esiintymisten lukumäärän.
Oletuksena, egrep suorittaa kuvioiden sovituksen isot ja pienet kirjaimet huomioiden. Se tarkoittaa sanoja – meitä, Meitä, MEitä ja MEIDÄT kohdellaan eri sanoina. Voimme kuitenkin pakottaa kirjainkoon välittömän haun käyttämällä -i
vaihtoehto.
Esimerkiksi alla olevassa komentomallissa vastaavuus onnistuu tekstille me
ja Me
:
$ egrep - i näyte.txt
Edellisessä esimerkissä näimme, että egrep komento suorittaa osittaisen täsmäyksen. Esimerkiksi kun etsimme tekstiä me
sitten kuvion sovitus onnistui myös muissa teksteissä. Kuten web, verkkosivut ja olivat.
Tämän rajoituksen voittamiseksi voimme -w
vaihtoehto, joka pakottaa koko sanan vastaavuuden.
$ egrep -w näyte.txt.
Toistaiseksi olemme käyttäneet egrep -komento tulostaa rivit, joilla annettu kuvio esiintyy. Joskus kuitenkin haluamme suorittaa toimenpiteen päinvastoin.
Saatamme esimerkiksi haluta tulostaa rivit, joissa annettua kuviota ei ole. Voimme saavuttaa tämän avulla -v
vaihtoehto:
$ egrep -v näyte.txt.
Täällä voimme nähdä, että komento tulostaa kaikki rivit, jotka eivät sisällä tekstiä me
.
Voimme käyttää -n
-komennon vaihtoehto ottaa käyttöön rivinumerointi, joka näyttää rivinumeron tulosteessa, kun kuvion sovitus onnistuu. Tämä yksinkertainen temppu tekee tuloksesta merkityksellisemmän.
$ egrep -n ammattilaiset sample.txt.
Yllä olevassa tuotoksessa voimme nähdä, että sana ammattilaisia
on läsnä 5 linja.
Hiljaisessa tilassa egrep komento ei tulosta vastaavaa kuviota. Joten meidän on käytettävä komennon palautusarvoa tunnistaaksemme, onnistuiko mallisovitus vai ei.
Voimme käyttää -q
komennon vaihtoehto ottaa käyttöön hiljainen tila, joka on hyödyllinen komentosarjoja kirjoitettaessa.
$ egrep -q ammattilaiset sample.txt. $ egrep -q ei-olemassa oleva malli sample.txt.
Tässä esimerkissä nolla palautusarvo osoittaa kuvion olemassaolon, kun taas nollasta poikkeava arvo osoittaa kuvion puuttumisen.
Joskus on järkevää näyttää muutama rivi sovitetun kuvion ympärillä. Tällaisissa skenaarioissa voimme käyttää -B
komennon vaihtoehto, joka tulee näkyviin N riviä ennen sovitettua kuviota.
Esimerkiksi alla oleva komento tulostaa rivin, jolle mallin sovitus onnistuu, sekä 2 riviä ennen sitä.
$ egrep -B 2 -n ammattilaiset sample.txt
Tässä esimerkissä olemme käyttäneet -n
vaihtoehto näyttää rivinumerot.
Samalla tavalla voimme käyttää -A
komennon vaihtoehto näyttää rivit kuvion vastaavuuden jälkeen. Esimerkiksi alla oleva komento tulostaa rivin, jolla mallin täsmäytys onnistuu, sekä seuraavat 2 riviä.
$ egrep -A 2 -n ammattilaiset sample.txt.
Tämän lisäksi egrep komento tukee -C
vaihtoehto, joka yhdistää vaihtoehtojen toiminnallisuuden -A
ja -B
, joka näyttää viivat ennen ja jälkeen vastaavan kuvion.
$ egrep -C 2 -n ammattilaiset sample.txt
Kuten aiemmin keskusteltiin, voimme suorittaa kuvioiden sovituksen useille tiedostoille. Tilanne muuttuu kuitenkin hankalaksi, kun tiedostot ovat useissa alihakemistoissa ja välitämme ne kaikki komentoargumentteina.
Tällaisissa tapauksissa voimme suorittaa kuvioiden sovituksen rekursiivisella tavalla käyttämällä -r
vaihtoehto seuraavan esimerkin mukaisesti.
Luo ensin 2 alihakemistoa ja kopioi sample.txt tiedosto niihin:
$ mkdir -p hakemisto1/hakemisto2. $ cp sample.txt dir1/ $ cp sample.txt dir1/dir2/
Suoritetaan nyt hakutoiminto rekursiivisella tavalla:
$ egrep -r ammattilaiset hakemisto1.
Yllä olevassa esimerkissä voimme nähdä, että mallin vastaavuus onnistui hakemisto1/hakemisto2/näyte.txt ja dir1/sample.txt tiedostot.
Voimme käyttää pistettä (.)
merkki vastaa mitä tahansa yksittäistä merkkiä paitsi rivin loppua. Esimerkiksi alla oleva säännöllinen lauseke vastaa tekstiä har, hat, ja siinä on:
$ egrep "ha." sample.txt.
Voimme käyttää tähteä (*)
vastaamaan edellisen merkin nollaa tai useampaa esiintymää. Esimerkiksi alla oleva säännöllinen lauseke vastaa tekstiä, joka sisältää merkkijonon me
jota seuraa nolla tai useampi merkin esiintyminen b
.
$ egrep "web*" sample.txt.
Voimme käyttää plussaa (+)
vastaamaan yhtä tai useampaa edellisen merkin esiintymää. Esimerkiksi alla oleva säännöllinen lauseke vastaa tekstiä, joka sisältää merkkijonon me
jota seuraa vähintään yksi hahmon esiintyminen b
.
$ egrep "web+" sample.txt.
Tässä voimme nähdä, että kuvioiden sovittaminen ei onnistu sanoilla - me
ja olivat
, hahmon puuttumisen vuoksi b
.
Voimme käyttää hoitoa (^)
edustamaan rivin alkua. Esimerkiksi alla oleva säännöllinen lauseke tulostaa tekstillä alkavat rivit Me
:
$ egrep "^Me" sample.txt.
Voimme käyttää dollaria ($)
edustamaan rivin loppua. Esimerkiksi alla oleva säännöllinen lauseke tulostaa rivit, jotka päättyvät tekstiin e.
:
$ egrep "e.$" sample.txt.
Voimme käyttää hoitoa (^)
heti perässä dollari ($)
edustamaan tyhjää riviä. Käytä tätä säännöllisessä lausekkeessa tyhjien rivien poistamiseen:
$ egrep -n -v "^$" sample.txt.
Yllä olevassa tulosteessa voimme nähdä, että rivinumerot 2, 4, 6, 8 ja 10 eivät näy, koska ne ovat tyhjiä.
Tässä artikkelissa keskustelimme joistakin hyödyllisistä esimerkeistä egrep komentoja. Näitä esimerkkejä voidaan käyttää jokapäiväisessä elämässä tuottavuuden parantamiseksi.
Tiedätkö muita parhaita esimerkkejä egrep-komennosta Linuxissa? Kerro meille mielipiteesi alla olevissa kommenteissa.