GREP(1)

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 sensijaan 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; sensijaan 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; sensijaan 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ä "ohitus" säännöt.

Takaisinviittaus \n , jossa n on yksinumeroinen luku, vastaa merkkijonoa joka aikaisemmin etsittiin säännöllisen lausekkeen n:nessä sulkulausekkeessa.

Tavallisissa säännöllisissä lausekkeissa metamerkit ?, +, {, |, (, ja ) menettävät erityistarkoituksensa; käytä sensijaan versioita joissa on kenoviiva edessä \?, \+, \{, \|, \(, ja \).

Käskyssä egrep metamerkki { menettää erityistarkoituksensa; käytä sensijaan \{.

DIAGNOSTIIKKA

Normaalisti ohjelman poistumistila(tila ohjelman loputtua) on 0 jos on löytynyt haettuja merkkijonoja, ja 1 jos niitä ei ole löytynyt. ( -v valitsin kääntää toiminnan.) Poistumistila on 2 jos merkkijonossa oli virheitä, tiedostoja joita ei pystytty lukemaan, tai muita järjestelmävirheitä.

BUGIT

Lähetä bugiraportit osoitteeseen bug-gnu-utils@prep.ai.mit.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.

KATSO MYÖS