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.