Linuxin egrep-komento

Päivitetty: Unixin kaltaisissa käyttöjärjestelmissä egrep-komento etsii tekstikuviota käyttämällä laajennettuja säännöllisiä lausekkeita vastaavuuden suorittamiseen. egrep-käskyn suorittaminen vastaa grep-käskyn suorittamista -E-optiolla.

Tämä sivu käsittelee egrep-käskyn GNU/Linux-versiota.

Syntaksi

egrep PATTERN 

Optiot

-A NUM,
–after-konteksti=NUM
Tulostaa täsmääviä rivejä jäljelle jäävän kontekstiosuuden NUM rivejä täsmäävien rivejä jäljelle jäävän kontekstin jälkeen. Sijoittaa — sisältävän rivin vierekkäisten osumaryhmien väliin.
-a, –text Käsittelee binääritiedoston ikään kuin se olisi tekstiä; tämä vastaa –binary-files=text -vaihtoehtoa.
-B NUM,
–before-context=NUM
Tulostaa NUM riviä etumerkkikontekstin rivien edessä ennen osumarivejä. Asettaa — sisältävän rivin vierekkäisten osumaryhmien väliin.
-C NUM, –context=NUM Tulostaa NUM riviä tulostuskontekstia. Asettaa — sisältävän rivin vierekkäisten osumaryhmien väliin.
-b, –byte-offset Tulostaa syötetiedoston tavuoffsetin ennen jokaista tulostusriviä.
–binääritiedostot=TYPE Jos tiedoston ensimmäiset tavut viittaavat siihen, että tiedosto sisältää binääritietoa, oletetaan, että tiedosto on tyyppiä TYPE. Oletusarvoisesti TYPE on binäärinen, ja grep antaa normaalisti joko yksirivisen viestin, joka kertoo, että binäärinen tiedosto täsmää, tai ei viestiä, jos täsmäämistä ei tapahdu. Jos TYPE on without-match, grep olettaa, että binääritiedosto ei täsmää; tämä vastaa -I-vaihtoehtoa. Jos TYPE on teksti, grep käsittelee binääritiedoston kuin se olisi tekstiä; tämä vastaa -a-vaihtoehtoa. Varoitus: grep –binary-files=text saattaa tulostaa binääristä roskaa, millä voi olla ikäviä sivuvaikutuksia, jos tuloste on terminaali ja jos terminaaliohjain tulkitsee osan siitä komentoina.
–colour,
–color
Ympäröi täsmäävää merkkijonoa GREP_COLOR-ympäristömuuttujasta löytyvällä merkillä. WHEN voi olla ’never’, ’always’ tai ’auto’
-c, –count Estä normaali tulostus; sen sijaan tulosta jokaisesta syötetiedostosta täsmäävien rivien lukumäärä. Jos käytössä on -v, –invert-match-vaihtoehto (ks. alla), laske ei-täsmäävät rivit.
-D ACTION,
–devices=ACTION
Jos syötetiedosto on laite, FIFO tai socket, käytä ACTION:ia sen käsittelyyn. Oletusarvoisesti ACTION on read, mikä tarkoittaa, että laitteet luetaan kuin ne olisivat tavallisia tiedostoja. Jos ACTION on skip, laitteet ohitetaan äänettömästi.
-d ACTION,
–directories=ACTION
Jos syötetiedosto on hakemisto, käytä ACTIONia sen käsittelyyn. Oletusarvoisesti ACTION on read, mikä tarkoittaa, että hakemistot luetaan kuin ne olisivat tavallisia tiedostoja. Jos ACTION on skip, hakemistot ohitetaan äänettömästi. Jos ACTION on recurse, grep lukee rekursiivisesti kaikki tiedostot jokaisen hakemiston alta; tämä vastaa -r-optiota.
-e PATTERN,
–regexp=PATTERN
Käytä PATTERNiä kuviona; hyödyllinen suojata ”-”-alkuisia kuvioita.
-F, –fixed-strings Tulkitse PATTERN listaksi kiinteitä merkkijonoja, jotka on erotettu rivinvaihtoviivoilla ja joita voidaan sovittaa.
-P, –perl-regexp Tulkitse PATTERN Perlin säännölliseksi lausekkeeksi.
-f FILE, –file=FILE Hakee kuviot tiedostosta FILE, yksi per rivi. Tyhjä tiedosto sisältää nolla kuviota, eikä siis täsmää mihinkään.
-G, –basic-regexp Tulkitse PATTERN perus-säännölliseksi lausekkeeksi (ks. alla). Tämä on oletusarvo.
-H, –with-filename Tulostaa tiedostonimen jokaisesta vastaavuudesta.
-h, –no-filename Estä tiedostonimien etuliite tulosteessa, kun etsitään useita tiedostoja.
–help Tulostaa lyhyen ohjeviestin.
-I Käsittele binääritiedosto ikään kuin se ei sisältäisi täsmäävää dataa; tämä vastaa –binary-files=without-match -vaihtoehtoa.
-i, –ignore-case Ei huomioi isojen ja pienten kirjainten välisiä eroja sekä PATTERN- että syötetiedostoissa.
-L,
–files-without-match
Estä normaali tulostus; tulosta sen sijaan jokaisen sellaisen syöttötiedoston nimi, josta ei normaalisti tulostu tulostetta. Skannaus pysähtyy ensimmäiseen vastaavuuteen.
-l,–files-with-matches Estä normaali tulostus; tulosta sen sijaan jokaisen sellaisen syötetiedoston nimi, josta tulostus normaalisti tulostuisi. Skannaus pysähtyy ensimmäiseen vastaavuuteen.
-m NUM,
–max-count=NUM
Lopeta tiedoston lukeminen NUM vastaavan rivin jälkeen. Jos syötteenä on vakiosyöttö tavallisesta tiedostosta ja tuloksena on NUM täsmäävää riviä, grep varmistaa, että vakiosyöttö sijoitetaan viimeisen täsmäävän rivin jälkeen, ennen kuin se poistuu, riippumatta siitä, onko perässä kontekstirivejä. Näin kutsuva prosessi voi jatkaa hakua. Kun grep pysähtyy NUM täsmäävän rivin jälkeen, se tulostaa kaikki perässä olevat kontekstirivit. Kun käytetään myös -c- tai –count-vaihtoehtoa, grep ei tulosta lukumäärää, joka on suurempi kuin NUM. Kun käytetään myös -v- tai –invert-match-optiota, grep pysähtyy sen jälkeen, kun se on antanut NUM ei-täsmääviä rivejä.
–mmap Käytetään mahdollisuuksien mukaan mmap-järjestelmäkutsua syötteen lukemiseen oletusarvoisen read-järjestelmäkutsun sijasta. Joissakin tilanteissa –mmap tuottaa paremman suorituskyvyn. –mmap voi kuitenkin aiheuttaa määrittelemätöntä käyttäytymistä (mukaan lukien ytimen tyhjennykset), jos syötetiedosto kutistuu grepin toimiessa tai jos tapahtuu I/O-virhe.
-n, –line-number Kunkin tulostusrivin kohdalla käytetään rivinumeroa sen syötetiedostossa.
-o, –only-matching Näyttää vain sen osan täsmäävästä rivistä, joka vastaa PATTERNia.
–label=LABEL Näyttää varsinaisen vakiotulostulosta tulevan syötteen tulosteena, joka on peräisin LABEL-tiedostosta. Tämä on erityisen hyödyllistä työkaluille kuten zgrep, esim. gzip -cd foo.gz |grep -H –label=foo jotain
–line-buffered Käytä rivipuskurointia. Tästä voi aiheutua suorituskykyhaittoja.
-q, –quiet, –silent Ole hiljaa; älä kirjoita mitään standarditulosteeseen. Poistuu välittömästi nollatilalla, jos yhtään vastaavuutta löytyy, vaikka virhe havaittaisiinkin. Katso myös -s- tai –no-messages-vaihtoehto.
-R, -r, –recursive Lue kaikki tiedostot jokaisen hakemiston alta rekursiivisesti; tämä vastaa -d recurse-vaihtoehtoa. Modified by:
–include=PATTERN
Taivuta hakemistoissa vain etsimällä tiedosto, joka vastaa PATTERNia.
–exclude=PATTERN
Taivuta hakemistoissa ohittamalla tiedosto, joka vastaa PATTERNia.
-s, –no-messages Elättää virheilmoitukset tiedostoista, joita ei ole olemassa tai joita ei voi lukea. Huomautus siirrettävyydestä: toisin kuin GNU grep, perinteinen grep ei ollut POSIX.2:n mukainen, koska perinteiseltä grep:ltä puuttui -q-vaihtoehto ja sen -s-vaihtoehto käyttäytyi kuten GNU grepin -q-vaihtoehto. Shell-skriptien, joiden on tarkoitus olla siirrettävissä perinteiseen grep:iin, tulisi välttää sekä -q- että -s-vaihtoehtoa ja ohjata tulosteet sen sijaan tiedostoon /dev/null.
-U, –binary Käsittele tiedosto(t) binäärinä. Oletusarvoisesti MS-DOS:ssa ja Microsoft Windowsissa grep arvaa tiedostotyypin katsomalla tiedostosta luetun ensimmäisen 32 KB:n sisällön. Jos grep päättää, että tiedosto on tekstitiedosto, se poistaa CR-merkit alkuperäisestä tiedoston sisällöstä (jotta säännölliset lausekkeet, joissa on ^ ja $, toimisivat oikein). Määrittämällä -U tämä arvaus kumotaan, jolloin kaikki tiedostot luetaan ja välitetään sovitusmekanismille sanatarkasti; jos tiedosto on tekstitiedosto, jonka jokaisen rivin lopussa on CR/LF-parit, tämä aiheuttaa joidenkin säännöllisten lausekkeiden epäonnistumisen. Tällä valinnalla ei ole vaikutusta muilla alustoilla kuin MS-DOS:lla ja MS-Windowsilla.
-u, –unix-byte-offsets Raportoi Unix-tyyliset tavuoffsetit. Tämä kytkin saa grep:n raportoimaan tavuoffsetit ikään kuin tiedosto olisi Unix-tyylinen tekstitiedosto, eli CR-merkit on poistettu. Tämä tuottaa samanlaisen tuloksen kuin grep:n käyttö Unix-koneessa. Tällä vaihtoehdolla ei ole vaikutusta, ellei myös -b-vaihtoehtoa käytetä; sillä ei ole vaikutusta muilla alustoilla kuin MS-DOS ja MS-Windows.
-V, –version Tulostaa grep:n versionumeron vakiovirheeseen. Tämä versionumero tulisi sisällyttää kaikkiin vikailmoituksiin (ks. alla).
-v, –invert-match Käännä täsmäytyksen merkitys, jotta voit valita ei-itäsmättävät rivit.
-w, –word-regexp Valitse vain ne rivit, jotka sisältävät täsmäyksiä, jotka muodostavat kokonaisia sanoja. Testi on, että täsmäävän merkkijonon on oltava joko rivin alussa tai sitä edeltää muu kuin sanan muodostava merkki. Vastaavasti sen on oltava joko rivin lopussa tai sen jälkeen on oltava muu kuin sanan muodostava merkki. Sanan muodostavia merkkejä ovat kirjaimet, numerot ja alleviivaus.
-x, –line-regexp Valitsee vain ne osumat, jotka täsmälleen vastaavat koko riviä.
-y Vanhentunut synonyymi sanalle -i.
-Z, –null Tulosta nollatavu (ASCII NULL -merkki) tiedostonimen jälkeen normaalisti seuraavan merkin sijasta. Esimerkiksi grep -lZ tulostaa nollatavun jokaisen tiedostonimen jälkeen tavallisen rivinvaihdon sijasta. Tämä vaihtoehto tekee tulosteesta yksiselitteisen myös silloin, kun tiedostonimet sisältävät epätavallisia merkkejä, kuten rivinvaihdon. Tätä asetusta voidaan käyttää komentojen find -print0, perl -0, sort -z ja xargs -0 kanssa käsittelemään mielivaltaisia tiedostonimiä, myös sellaisia, jotka sisältävät rivinvaihtomerkkejä.

Säännölliset lausekkeet

Säännöllinen lauseke on kuvio, joka kuvaa joukon merkkijonoja. Säännölliset lausekkeet rakennetaan analogisesti aritmeettisten lausekkeiden kanssa käyttämällä erilaisia operaattoreita pienempien lausekkeiden yhdistämiseen.

Grep ymmärtää kahta eri versiota säännöllisten lausekkeiden syntaksista: ”perus” ja ”laajennettu”. GNU grepissä ei ole eroa käytettävissä olevissa toiminnoissa, kun käytetään kumpaakaan syntaksia. Muissa toteutuksissa perus-säännölliset lausekkeet ovat vähemmän tehokkaita. Seuraava kuvaus koskee laajennettuja säännöllisiä lausekkeita, joita käytetään egrepissä; erot perus-säännöllisiin lausekkeisiin on esitetty tiivistetysti sen jälkeen.

Perusrakennuspalikat ovat säännöllisiä lausekkeita, jotka täsmäävät yhteen merkkiin. Useimmat merkit, mukaan lukien kaikki kirjaimet ja numerot, ovat säännöllisiä lausekkeita, jotka täsmäävät itseensä. Mikä tahansa metamerkki, jolla on erityinen merkitys, voidaan lainata edeltämällä sitä backslash-merkillä.

Sulku-ilmaus on luettelo merkkejä, jotka on suljettu . Se vastaa mitä tahansa yksittäistä merkkiä kyseisessä luettelossa; jos luettelon ensimmäinen merkki on karetti ^, se vastaa mitä tahansa merkkiä, joka ei ole luettelossa. Esimerkiksi säännöllinen lauseke vastaa mitä tahansa yksittäistä numeroa.

Sulkeislausekkeen sisällä alue-lauseke koostuu kahdesta merkistä, jotka on erotettu toisistaan väliviivalla (”-”). Se vastaa mitä tahansa yksittäistä merkkiä, joka sijoittuu näiden kahden merkin väliin, merkit mukaan lukien, käyttäen lokaalin rinnastusjärjestystä ja merkistöjä. Esimerkiksi oletusarvoisessa C-lokaalissa vastaa . Monet paikallisympäristöt lajittelevat merkit sanakirjajärjestykseen, ja näissä paikallisympäristöissä se ei useinkaan vastaa merkkiä ; se voi vastata esimerkiksi merkkiä ,. Saadaksesi perinteisen tulkinnan sulkujen lausekkeista voit käyttää C-paikallisaluetta asettamalla LC_ALL-ympäristömuuttujan arvoksi C.

Loppujen lopuksi tietyt nimetyt merkkiluokat ovat ennalta määriteltyjä sulkujen lausekkeissa seuraavasti. Niiden nimet ovat itsestään selviä, ja ne ovat , , , , , , , , , , , ja . Esimerkiksi ] tarkoittaa , paitsi että jälkimmäinen muoto riippuu C:n lokaalista ja ASCII-merkistökoodauksesta, kun taas ensimmäinen on riippumaton lokaalista ja merkistöistä. (Huomaa, että näissä luokkien nimissä olevat sulkeet ovat osa symbolisia nimiä, ja ne on sisällytettävä sulkujen lisäksi, jotka rajaavat sulkujen luettelon). Useimmat metamerkit menettävät erityismerkityksensä luetteloiden sisällä. Jos haluat sisällyttää kirjainmerkin ], aseta se luettelon ensimmäiseksi. Vastaavasti, jos haluat sisällyttää kirjainmerkin ^, sijoita se mihin tahansa muualle paitsi ensimmäiseksi. Jos haluat sisällyttää kirjainmerkin -, aseta se viimeiseksi.

Piste . vastaa mitä tahansa yksittäistä merkkiä. Symboli \w on ]:n synonyymi ja \W on ]:n synonyymi.

Karetti ^ ja dollarimerkki (”$”) ovat metamerkkejä, jotka vastaavat tyhjää merkkijonoa rivin alussa ja lopussa. Symbolit \< ja \> vastaavat tyhjää merkkijonoa sanan alussa ja lopussa. Symboli \b vastaa tyhjää merkkijonoa sanan reunassa, ja \B vastaa tyhjää merkkijonoa edellyttäen, että se ei ole sanan reunassa.

Säännöllisen lausekkeen perässä voi olla yksi useista toisto-operaattoreista:

? Edeltävä kohde on valinnainen ja sovitetaan enintään kerran.
* Edeltävä kohde sovitetaan nolla tai useampia kertoja.
+ Edeltävä kohde sovitetaan yhden tai useampia kertoja.
{n} Edellinen kohde täsmälleen n kertaa.
{n,} Edellinen kohde täsmää vähintään n kertaa.
{n,m} Edeltävä kohde vastaa vähintään n kertaa, mutta enintään m kertaa.

Kahta säännöllistä lauseketta voidaan ketjuttaa; tuloksena syntyvä säännönmukainen lauseke vastaa mitä tahansa merkkijonoa, joka on muodostettu ketjuttamalla kaksi alimerkkijonoa, jotka vastaavat ketjutettuja alimerkkijonoja.

Kaksi säännöllistä lauseketta voidaan yhdistää infiksioperaattorilla |; tuloksena saatava säännöllinen lauseke vastaa mitä tahansa merkkijonoa, joka vastaa kumpaakin alilauseketta.

Kertaus on etusijalla ketjuttamiseen nähden, joka puolestaan on etusijalla vuorotteluun nähden. Koko alilauseke voidaan sulkea sulkuihin näiden etusijasääntöjen ohittamiseksi.

Takaviittaus \n, jossa n on yksittäinen numero, vastaa merkkijonoa, jota on aiemmin vastannut säännöllisen lausekkeen n:ssä suluissa oleva alilauseke.

Regulaarisissa perusilmauksissa metamerkit ?, +, {, |, ( ja ) menettävät erikoismerkityksensä; niiden sijasta käytetään takaviivoitettuja versioita \?, \+, \{, \|, \( ja \).

Traditionaalinen egrep ei tukenut {-metamerkkiä, ja jotkut egrep-toteutukset tukevat sen sijaan \{, joten siirrettävien skriptien tulisi välttää {:aa egrep-malleissa ja käyttää kirjaimellisen {:n vastaavuutta.

GNU egrep pyrkii tukemaan perinteistä käyttöä olettamalla, että {:lla ei ole erikoisasemaa, jos se olisi epäkelvon intervalli-erittelyn alku. Esimerkiksi komentotulkin komento egrep ’{1’ etsii kaksimerkkistä merkkijonoa {1 sen sijaan, että ilmoittaisi säännöllisen lausekkeen syntaksivirheestä. POSIX.2 sallii tämän käyttäytymisen laajennuksena, mutta siirrettävien skriptien tulisi välttää sitä.

Ympäristömuuttujat

Grepin käyttäytymiseen vaikuttavat seuraavat ympäristömuuttujat:

Lokaali LC_foo määritetään tarkastelemalla kolmea ympäristömuuttujaa LC_ALL, LC_foo, LANG tässä järjestyksessä. Ensimmäinen näistä muuttujista, joka asetetaan, määrittää lokaalin. Jos esimerkiksi LC_ALL ei ole asetettu, mutta LC_MESSAGES on asetettu pt_BR:ksi, LC_MESSAGES-lokaalina käytetään Brasilian portugalia. C-paikalliskaavaa käytetään, jos mitään näistä ympäristömuuttujista ei ole asetettu tai jos locale catalogia ei ole asennettu tai jos grep:tä ei ole käännetty kansallisen kielituen (NLS) kanssa.

GREP_OPTIONS

Tämä muuttuja määrittää oletusasetukset, jotka asetetaan nimenomaisten asetusten eteen. Jos esimerkiksi GREP_OPTIONS on ’–binary-files=without-match –directories=skip’, grep käyttäytyy kuin kaksi vaihtoehtoa –binary-files=without-match ja –directories=skip olisi määritetty ennen mitään nimenomaisia vaihtoehtoja. Vaihtoehtojen määrittelyt erotetaan välilyönneillä. Backslash-merkki pakenee seuraavan merkin, joten sitä voidaan käyttää määritettäessä vaihtoehtoa, joka sisältää välilyöntiä tai backslash-merkkiä.

GREP_COLOR

Määrittää korostuksen merkin.

LC_ALL, LC_COLLATE, LANG

Nämä muuttujat määrittelevät LC_COLLATE-paikannusalueen, joka määrittää alue-ilmaisujen, kuten .

LC_ALL, LC_CTYPE, LANG

Nämä muuttujat määrittelevät LC_CTYPE-paikannusalueen, joka määrittää merkkien tyypin, esim, mitkä merkit ovat välilyöntejä.

LC_ALL, LC_MESSAGES, LANG

Nämä muuttujat määrittelevät LC_MESSAGES-lokaalin, joka määrittää kielen, jota grep käyttää viesteissä. C:n oletuslokaali käyttää amerikanenglantilaisia viestejä.

POSIXLY_CORRECT

Jos se on asetettu, grep käyttäytyy POSIX.2:n edellyttämällä tavalla; muussa tapauksessa grep käyttäytyy enemmän kuin muut GNU-ohjelmat. POSIX.2 vaatii, että tiedostojen nimiä seuraavia optioita on käsiteltävä tiedostojen niminä; oletusarvoisesti tällaiset optiot permutoidaan operandiluettelon eteen ja niitä käsitellään optioina. POSIX.2 vaatii myös, että tunnistamattomat optiot diagnosoidaan ”laittomiksi”, mutta koska ne eivät oikeastaan ole lain vastaisia, oletusarvo on diagnosoida ne ”virheellisiksi”. POSIXLY_CORRECT poistaa käytöstä myös _N_GNU_nonoption_argv_flags_, joka on kuvattu alla.

_N_GNU_nonoption_argv_flags_

(Tässä N on grepin numeerinen prosessin tunnus.) Jos tämän ympäristömuuttujan i:nnen merkin arvo on 1, grepin i:ttä operandia ei pidetä optioksi, vaikka se näyttäisikin siltä. Komentotulkki voi laittaa tämän muuttujan ympäristöön jokaiselle suorittamalleen komennolle ja määrittää, mitkä operandit ovat tiedostonimen jokerimerkkilaajennuksen tuloksia, eikä niitä siksi pidä käsitellä optioina. Tämä käyttäytyminen on käytettävissä vain GNU C -kirjaston kanssa ja vain silloin, kun POSIXLY_CORRECT ei ole asetettu.

Esimerkkejä

egrep "support|help|windows" myfile.txt

Etsitään tiedostosta myfile.txt tukihakuja ja ikkunoita sisältäviä malleja.

egrep '^+$' myfile.txt

Sovita kaikki rivit tiedostossa myfile.txt, jotka aloittavat rivin aakkosellisella sanalla, joka myös päättää rivin.

egrep -c '^begin|end$' myfile.txt

Laskekaa niiden myfile.txt-tiedoston rivien lukumäärä, jotka alkavat sanalla ’begin’ tai päättyvät sanalla ’end’.

fgrep – Suodattaa tekstiä, joka vastaa kiinteämerkkistä merkkijonoa.
grep – Suodattaa tekstiä, joka vastaa säännöllistä lauseketta.
sed – Tekstin suodatus- ja muunnosapuohjelma.
sh – Bourne-selaimen komentojen tulkkipalvelin.

Vastaa

Sähköpostiosoitettasi ei julkaista.