NIMI
grep, egrep, fgrep − tulostaa tiedoston rivit, joissa esiintyy määritelty merkkijono
YLEISKATSAUS
grep [-AB] nro] [-CEFGVbchiLlnqsvwxyUu] [-e merkkijono | -f tiedosto] [--extended-regexp] [--fixed-strings] [--basic-regexp] [--regexp=MERKKIJONO] [--file=TIEDOSTO] [--ignore-case] [--word-regexp] [--line-regexp] [--line-regexp] [--no-messages] [--revert-match] [--version] [--help] [--byte-offset] [--line-number] [--with-filename] [--no-filename] [--quiet] [--silent] [--files-without-match] [--files-with-matcces] [--count] [--before-context=NRO] [--after-context=NRO] [--context] [--binary] [--unix-byte-offsets] tiedostot...
KUVAUS
Grep-komento etsii nimetyistä tiedostoista rivejä, joissa esiintyy määritelty merkkijono. (Jollei tiedostoja ole nimetty tai jos on nimetty tiedostonimi − , grep etsii merkkijonoa vakiosyötteestä). Oletusarvoisesti grep tulostaa rivit, joissa esiintyy määritelty merkkijono.
Grep-komennosta
on olemassa kolme muunnelmaa, joita voidaan
käyttää seuraavien valitsimien kanssa.
−G, --basic-regexp
Tulkitsee merkkijonon tavallisena säännöllisenä lausekkeena (katso alempaa). Tämä on oletusarvona.
−E, --extended-regexp
Tulkitsee merkkijonon laajennettuna säännöllisenä lausekkeena (katso alempaa).
−F, --fixed-strings
Tulkitsee merkkijonon merkkijonojen listana, jotka on erotettu toisistaan rivinvaihdoilla, ja joista mikä tahansa käy etsittäväksi sanaksi.
Lisäksi on olemassa kaksi muunnelmaa, egrep ja fgrep. Egrep on samantyyppinen (mutta ei täysin identtinen) käskyn grep −E kanssa ja se on myös yhteensopiva vanhan, historiallisen Unixin egrep:n kanssa. Fgrep on vastaava komennon grep −F kanssa.
Kaikkia grep-komennon muunnelmia voidaan käyttää seuraavien valitsimien kanssa:
−nro |
Haun tulokset tulostetaan siten, että haettua riviä ennen tai jälkeen tulostetaan nro kappaletta rivejä tiedostosta. Grep ei kuitenkaan koskaan tulosta yhtään riviä enemmän kuin kerran. |
−A nro , --after-context=NRO
Tulostaa nro kappaletta haetun rivin jälkeisiä rivejä.
−B nro , --before-context=NRO
Tulostaa nro kappaletta haettua riviä edeltäviä rivejä.
−C, --context
Sama kuin −2.
−V, --version
Tulostaa grep:n versionumeron virhetulosteeseen. Tämä versionumero tulisi mainita kaikissa virheraporteissa (katso alempaa).
−b, --byte-offset
Tulostaa tulosteen rivien alkuun tavujen määrän tiedoston alusta ennen löytyneitä merkkijonoja.
−c, --count
Estää normaalin tulostuksen; tulostaa sen sijaan jokaisesta tiedostosta rivien määrän, joista löytyy haettava merkkijono. Valitsimella −v, --revert-match (katso alempaa) toiminta on päinvastainen; tulostetaan rivien määrä, joista ei löydy haettavaa merkkijonoa.
−e merkkijono,--regexp=MERKKIJONO
Käytä merkkijono merkkijonoa; käyttökelpoinen merkkijonoille, jotka alkavat merkillä −.
−f tiedosto,--file=TIEDOSTO
Poimii merkkijonon tiedosto-nimisestä tiedostosta.
−h, --no-filename
Estä tiedostonimien tulostus tulosteen rivien alkuun, kun etsitään useammasta kuin yhdestä tiedostosta.
−i, --ignore-case
Jätä huomiotta merkkien koko (esim. isot/pienet kirjaimet) merkkijonoissa ja syöttötiedostoissa.
−L, --files-without-match
Estä normaali tulostus; sen sijaan tulosta jokaisen tiedoston nimi, josta ei löydy etsittävää merkkijonoa. Etsintä päättyy ensimmäiseen löydettyyn merkkijonoon.
−l, --files-with-matches
Estä normaali tulostus; sen sijaan tulosta jokaisen tiedoston nimi, josta löytyy etsittävä merkkijono. Etsintä päättyy ensimmäiseen löydettyyn merkkijonoon.
−n, --line-number
Tulosta jokaisen rivin rivinumero, josta löytyy määritelty merkkijono.
−q, --quiet
Hiljainen. Estä normaali tulostus. Etsintä päättyy ensimmäiseen osumaan.
−s, --silent
Älä tulosta virheilmoituksia tiedostoista, joita ei ole olemassa tai tiedostoista, jotka eivät ole luettavissa.
−v, --revert-match
Muuttaa oletustoiminnan päinvastaiseksi; tulostaa rivit, joista ei löydy määriteltyä merkkijonoa.
−w, --word-regexp
Tulosta vain ne rivit, joista löytyy täydellisesti kokonainen etsittävä merkkijono. Haettava merkkijono on joko oltava rivin alussa, tai sitä ennen on oltava merkki, joka ei ole kirjain, numero tai alaviiva. Vaihtoehtoisesti merkkijono on oltava joko rivin lopussa tai sen jälkeen on oltava merkki, joka ei ole kirjain, numero tai alaviiva.
−x, --line-regexp
Tulosta vain ne haun tulokset, jotka täydellisesti vastaavat koko riviä.
−y |
Ei käytössä oleva synonyymi valitsimelle −i. |
−U, --binary
Käsittele tiedosto(j)a binääritiedostona. Oletusarvoisesti MS-DOS- ja MS-Windows -käyttöjärjestelmissä grep määrittelee tiedoston tyypin lukemalla sen alusta ensimmäiset 32 kilotavua. Jos grep päättelee, että tiedosto on tekstitiedosto, se poistaa CR (carriage return) -merkit eli rivinvaihtomerkit alkuperäisestä tiedostosta (jotta säännölliset lausekkeet toimisivat oikein merkkien ^ ja $ kanssa). Käyttämällä valitsinta −U kytketään pois edellä mainittu automaattinen tiedostotyypin määrittelytoiminto. Tällöin kaikki tiedostot luetaan ja siirretään etsintämekanismiin sellaisenaan; eli jos tiedosto on tekstitiedosto, jossa on CR/LF -merkit jokaisen rivin lopussa, jotkut säännölliset lausekkeet eivät toimi. Tätä valitsinta voi käyttää ainoastaan MS-DOS- ja MS-Windows -käyttöjärjestelmissä.
−u, --unix-byte-offsets
Raportoi Unix-tyylisesti tavujen määrän tiedoston alusta ennen löytyneitä merkkijonoja. Tämä valitsin aiheuttaa sen, että grep raportoi tavujen määrän, kuten tiedosto olisi Unix-tyylinen tekstitiedosto, eli josta CR-merkit on poistettu. Tämä saa aikaan tulokset, jotka ovat identtiset verrattuna tulokseen, jos grep ajettaisiin Unix-koneella. Tällä valitsimella ei ole vaikutusta, ellei käytetä samanaikaisesti −b valitsinta; sitä tuetaan ainoastaan MS-DOS- ja MS-Windows -käyttöjärjestelmissä.
SÄÄNNÖLLISET LAUSEKKEET
Säännöllinen lauseke on merkkijono, joka kuvailee tietyn merkkijonosarjan. Säännölliset lausekkeet on muodostettu samalla tavalla kuin aritmeettiset lausekkeet, yhdistämällä pienempiä lausekkeita käyttäen useita operaattoreita.
Grep ymmärtää kahta erilaista säännöllisten lausekkeiden syntaksia: ’tavallista’ ja ’laajennettua.’ GNU grep:n toiminnassa ei ole eroa käytettäessä eri syntakseja. Muissa toteutuksissa tavalliset säännölliset lausekkeet ovat vähemmän tehokkaita. Seuraava kuvaus sopii laajennettuihin säännöllisiin lausekkeisiin; eroavaisuudet tavallisiin säännöllisiin lausekkeisiin on koottu yhteenvedoksi myöhemmin.
Säännölliset lausekkeet, jotka vastaavat yhtä merkkiä, ovat tärkeitä työkaluja. Useimmat merkit, mukaanlukien kaikki kirjaimet ja numerot, ovat säännöllisiä lausekkeita, jotka vastaavat itseään. Mitä tahansa metamerkkiä, jolla on erityinen merkitys voidaan käyttää laittamalla sen eteen kenoviiva.
Merkkijonolista, joka on sulkujen [ ja ] sisällä, vastaa mitä tahansa yksittäistä merkkiä kyseisellä listalla. Jos listan ensimmäinen merkki on ^-merkki, se vastaa mitä tahansa merkkiä, joka ei ole listalla. Esimerkiksi säännöllinen lauseke [0123456789] vastaa mitä tahansa yhtä yksinumeroista lukua. ASCII-merkkien alue voidaan määritellä antamalla ensimmäinen ja viimeinen merkki, erotettuna toisistaan tavuviivalla. Lisäksi on määritelty etukäteen tiettyjä merkkien luokkia. Niiden nimet ovat itsensä selittäviä ja ne ovat [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:] ja [:xdigit:]. Esimerkiksi [[:alnum:]] tarkoittaa samaa kuin [0-9A-Za-z]. Jälkimmäinen muoto on riippuvainen ASCII-merkkien koodauksesta, kun taas aiempi muoto on siirrettävämpi. (Huomaa, että kaksoispisteet ja sulkeet luokkien nimissä ovat osa nimeä ja ne on huomioitava.) Monilla metamerkeillä ei ole erityistä merkitystä, kun niitä käytetään listoissa. Ottaaksesi huomioon merkin ], aseta se ensimmäiseksi listaan. Samalla tavalla, ottaaksesi huomioon merkin ^, aseta se mihin tahansa muualle kuin ensimmäiseksi. Viimeiseksi, ottaaksesi huomioon merkin −, aseta se viimeiseksi.
Piste . vastaa mitä tahansa yhtä merkkiä. Symboli \w on synonyymi merkinnälle [[:alnum:]] ja \W on synonyymi merkinnälle [^[:alnum]].
"Caret"-merkki ^ ja dollarimerkki $ ovat metamerkkejä, jotka vastaavat tyhjiä merkkejä rivin alussa ja lopussa. Symbolit \< ja \> vastaavat tyhjää merkkijonoa sanan alussa ja lopussa. Symboli \b vastaa tyhjää merkkijonoa sanan alussa tai lopussa, ja \B vastaa tyhjää merkkijonoa mikäli se ei ole sanan alussa tai lopussa.
Säännöllisen lausekkeen jälkeen, joka vastaa yhtä merkkiä, voidaan käyttää mitä tahansa monista toisto-operaattoreista:
? |
Edeltävä kohta on valinnainen ja se etsitään enimmillään kerran. | ||
* |
Edeltävä kohta etsitään nolla tai useamman kerran. | ||
+ |
Edeltävä kohta etsitään kerran tai useammin. | ||
{n} |
Edeltävä kohta etsitään tasan n kertaa. | ||
{n,} |
Edeltävä kohta etsitään n tai useamman kerran. | ||
{,m} |
Edeltävä kohta on valinnainen ja se etsitään enintään m kertaa. | ||
{n,m} |
Edeltävä kohta etsitään vähintään n kertaa, mutta ei useammin kuin m kertaa. |
Kaksi säännöllistä lauseketta voidaan liittää toisiinsa; syntyvä säännöllinen lauseke vastaa mitä tahansa merkkijonoa, joka muodostetaan liittämällä kaksi merkkijonoa, jotka vastaavasti vastaavat yhteen liitettyjä lausekkeita.
Kaksi säännöllistä lauseketta voidaan liittää toisiinsa ns. putkitus-merkillä (infix) |; syntyvä lauseke vastaa mitä tahansa merkkijonoa, joka vastaa jompaa kumpaa lauseketta.
Toistaminen ohittaa liittämisen, joka taas ohittaa vuorottelun. Kokonainen lauseke voidaan laittaa sulkeisiin, jolla voidaan ohittaa nämä "ohitussäännöt".
Takaisinviittaus \n, jossa n on yksinumeroinen luku, vastaa merkkijonoa, jota aikaisemmin etsittiin säännöllisen lausekkeen n:nessä sulkulausekkeessa.
Tavallisissa säännöllisissä lausekkeissa metamerkit ?, +, {, |, (, ja ) menettävät erityistarkoituksensa; käytä sen sijaan versioita, joissa on kenoviiva edessä \?, \+, \{, \|, \(, ja \).
Käskyssä egrep metamerkki { menettää erityistarkoituksensa; käytä sensijaan \{.
DIAGNOSTIIKKA
Normaalisti ohjelman paluuarvo (tila ohjelman loputtua) on 0, jos on löytynyt haettuja merkkijonoja ja 1 jos niitä ei ole löytynyt. ( −v valitsin kääntää toiminnan.) Paluuarvo on 2, jos merkkijonossa oli virheitä, tiedostoja joita ei pystytty lukemaan tai muita järjestelmävirheitä.
BUGIT
Lähetä bugiraportit osoitteeseen bug-gnu-utils [AT] prep.edu. Varmista ennen lähettämistä, että ’’grep’’-sana mainitaan ’’Subject:’’-kentässä.
Suuret toistomäärät {m,n} rakenteessa voivat aiheuttaa sen, että grep käyttää paljon muistia. Lisäksi, tietyt muut vaikeaselkoiset säännölliset lausekkeet tarvitsevat eksponentiaalisesti enemmän aikaa ja tilaa ja voivat aiheuttaa sen, että muisti loppuu.
Takaisinviittaukset ovat erittäin hitaita ja voivat tarvita eksponentiaalisesti enemmän aikaa.