Manpages

NÉV

grep, egrep, fgrep − mintához illeszkedő sorokat nyomtat

ÁTTEKINTÉS

grep [ [[AB] ]num ] [ [CEFGVBchilnsvwx] ] [ −e ] minta | −ffile ] [ fájlok... ]

LEÍRÁS

Grep a megnevezett bemeneti fájlok -ban a megadott mintá -hoz illeszkedő sorokat keres. Amennyiben nincs bemenő fájlnév megadva, vagy az a jel, a szabványos bemenetet olvassa. Alapértelmezés szerint grep a mintához illeszkedő sorokat kinyomtatja.

Három fő változata van a grep -nek, melyeket a következő opciókkal szabályozhatunk:

−G

A mintá -t alap szabályos kifejezésként (basic regular expression) kezeli. Részletesebben lásd lentebb. Ez az alapértelmezett.

−E

A mintá -t bővített szabályos kifejezésként (extended regular expression) kezeli. Részletesebben lásd lentebb.

−F

A mintá -t fix stringekből álló listának veszi, melyek újsor-jelekkel vannak elválasztva, és amelyekből bármelyikhez való illeszkedést keressük.

Létezik továbbá két programváltozat: egrep és fgrep . Egrep hasonló, de nem azonos grep −E, -vel és kompatíbilis a történelmi Unix egrep -pel. Fgrep azonos grep −F -fel.

A grep minden változata megérti az alábbi opciókat:

num

Az illeszkedést mutató sorok környezetükkel együtt lesznek kinyomatatva, azaz ezen sorok előtt és utáni num számú sor is nyomtatásra kerül. Eközben a grep program sosem fog egy sort többször kinyomtatni, még akkor sem, ha ezek a környezetek átfedik egymást.

−A num

Az illeszkedést mutató sorok utáni num sor is nyomtatásra kerül.

−B num

Az illeszkedést mutató sorok előtti num sor is nyomtatásra kerül.

−C

Azonos −2 -vel.

−V

Kinyomtatja a grep verziószámát a szabványos hibakimenetre. Ezt a verziószámot célszerű csatolni minden hibajelentéshez. (Lásd lent.)

−b

A kimeneti sorok előtt kinyomtatja a bemeneti fájlon belüli offset értéket. (Azaz azt, hogy a sor hányadik bájttal kezdődik a fájl kezdete után.)

−c

Elhagyja a szokásos kimenetet, ehelyett az illeszkedést mutató sorok számát írja ki minden fájl esetére. A −v opcióval (lásd lent), a nem illeszkedő sorokat számolja.

−e minta

A mintá -t használja mintának. Hasznos, ha a minta jellel kezdődik.

−f fájl

A mintát a fájl -ból veszi.

−h

Több fájlban való kereséskor elhagyja a kimeneten a fájlnevek sor eleji kiírását.

−i

Nem különbözteti meg a kis- és nagybetűket sem a mintá -ban, sem a bemeneti fájlban.

−L

Elhagyja a szokásos kimenetet, és csak azon fájlok neveit adja meg, amelyekből nem származna kimenet.

−l

Elhagyja a szokásos kimenetet, és csak azon fájlok neveit adja meg, amelyekből származna kimenet.

−n

A kimenet sorai elején megadja a sor bemeneti fájlon belüli számát.

−q

Csendes (quiet) üzemmód: elhagyja a normális kimenetet. (Ilyenkor a grep -nek csak a visszatérési értéke ad információt.)

−s

Elhagyja a nemlétező vagy olvashatatlan fájlokról szóló hibajelentéseket.

−v

Megfordítja az illeszkedés értelmét: a mintához nem illeszkedő sorokat választja ki.

−w

Csak azokat a sorokat választja ki, amelyekben az illeszkedés teljes szavakból származik. Azaz az illeszkedést mutató szövegrész előtt és után nem állhat betű, szám vagy aláhúzásjel.

−x

Csak teljes sorokkal való illeszkedést vizsgál.

SZABÁLYOS KIFEJEZÉSEK (REGULAR EXPRESSIONS)

A szabályos kifejezés egy minta, amely a stringeknek egy halmazát írja le. A szabályos kifejezések az aritmetikai kifejezésekhez hasonlóan konstruálhatók, azaz különböző operátorokkal kisebb kifejezésekből építhetők fel.

Grep kétféle változatát érti a szabályos kifejezések nyelvtanának (syntax): az ’’alap’’ (basic) és a ’’bővített’’ (extended) változatot. A GNU grep -ben nincs különbség a kétféle nyelvtan által elérhető funkciókban. Más megvalósításokban az alap szabályos kifejezések kevésbé hatékonyak. A következő leírás a bővített szabályos kifejezésekre vonatkozik; az alap reguláris kifejezéseknek ettől való különbségeit ezután összegezzük.

Az elemi építőkövek olyan szabályos kifejezések, melyek egyetlen karakterhez illeszkednek. A legtöbb karakter (pl. a betűk és a számok) szabályos kifejezések, melyek önmagukhoz illeszkednek. A speciális jelentéssel rendelkező metakarakterek (pl. a ., *, [ karakterek) elé backslash-t kell írni, hogy speciális jelentésük helyett a karakterhez való illeszkedést vizsgálhassuk. (Pl. a mintában levő \[ fog illeszkedik a szövegbeli nyitó szögletes zárójellel.)

A [ és ] jelek közé írt karakterlista illeszkedik a listában szereplő bármely karakterhez. Amennyiben a lista a ^ jellel kezdődik, az illeszkedés a listában nem szereplő karakterekkel áll fenn. Például a [0123456789] szabályos kifejezés bármely számjegyhez illeszkedik.

ASCII karakterek tartománya az első és utolsó karakterek megadásával adható meg, ha ezeket ’-’ jel választja el. (Pl. [a-f] ugyanaz, mint [abcdef].)

Végül a karakterek néhány speciális osztálya előre definiált névvel rendelkezik. (Ezen nevek jelentése angolul magától értetődő, itt kifejtjük őket.)
[:alnum:]

betű vagy szám

[:alpha:]

betű

[:cntrl:]

vezérlőkarakter

[:digit:]

számjegy

[:graph:]

grafikus karakter

[:lower:]

kisbetű

[:print:]

nyomtatható karakter

[:punct:]

elválasztó, központozó jel (.,;?!)

[:space:]

szóköz

[:upper:]

nagybetű

[:xdigit:]

hexadecimális szám

Pédául [[:alnum:]] jelentése: [0-9A-Za-z], azzal a kitétellel, hogy az utóbbi forma az ASCII kódolástól függ, míg az előbbi nem, így átvihető. (Megjegyzés: ezen osztálynevekben szereplő zárójelek a szimbolikus nevek részei, és a zárójeles listákat határoló zárójelek mellett ezeket is meg kell adni.)

A legtöbb metakarakter elveszti speciális jelentését egy listán belül. Egy ] jelet a minta első elemeként szerepeltetve csatolhatunk a listához. Hasonlóan a ^ jel az első kivételével bármely helyre kerülve a ’^’ jelet fogja jelenteni. Végül a ’-’ jelet a lista utolsó elemeként kell írni, ha nem metakarakterként akarjuk értelmezni.

A pont ( . ) minden karakterhez illeszkedik. A \w szimbólum az [[:alnum:]] szinonímája, míg \W ugyanaz, mint [^[:alnum:]].

A ^ és a $ jelek metakarakterek, melyek rendre a sorkezdő és -záró üres srtingekhez illeszkednek. Hasonlóan a \< és \> szimbólumok a szavak elejénél illetve végénél található üres stringhez illeszkednek. A \b a szóhatáron levő üres stringhez illeszkedik, míg \B a nem szóhatáron levő üres stringhez illeszkedik.

Az egy karakterhez illeszkedő szabályos kifejezéseket a következő ismétlési operátorok egyike követheti:

?

Az előző tag opcionális, és legfeljebb egyszer illeszkedik.

*

Az előző tag nulla vagy több alkalommal illeszkedik.

+

Az előző tag egy vagy több alkalommal illeszkedik.

{n}

Az előző tag pontosan n alkalommal illeszkedik.

{n,}

Az előző tag n vagy több alkalommal illeszkedik.

{,m}

Az előző tag legfeljebb m alkalommal illeszkedik.

{n,m}

Az előző tag legalább n de legfeljebb m alkalommal illeszkedik.

Két szabályos kifejezés összefűzhető; a kapott szabályos kifejezés minden olyan stringhez illeszkedik, amely a két szabályos kifejezéshez illeszkedő két részstringből állítható össze a sorrend megtartása mellett.

Két szabályos kifejezés összekapcsolható a | infix operátorral; a kapott szabályos kifejezés minden stringhez illeszkedik, amelyikhez valamelyik részkifejezés illeszkedik.

Az ismétlés nagyobb precedenciájú, mint az összefűzés, ami viszont a választóoperátornál (azaz |-nál) nagyobb precedenciájú. Egy részkifejezés zárójelbe tehető, hogy felülbíráljuk a precedenciát.

A \n visszahivatkozást (backreference) jelöl, ahol n egy számjegy. Ez illeszkedik ahhoz a stringhez, amely a szabályos kifejezés ezt megelőző n -edik zárójeles alkifejezéshez illeszkedett.

Az alap szabályos kifejezésekben a ?, +, {, |, (, és ) metakarakterek elvesztik speciális jelentésüket; helyettük a backslash-es változatukat kell használni: \?, \+, \{, \|, \(, és \).

Az egrep programban a { metakarakter elveszti speciális jelentését, helyette a \{ használható.

DIAGNOSZTIKA

Általában a kilépési állapot (exit status) 0, ha volt illeszkedés és 1, ha nem volt egyetlen illeszkedés sem. A −v opció megfordítja ennek értelmét.

A 2 kilépési állapot hibát jelez: nyelvtani hiba volt a mintában vagy elérhetetlen a bemeneti fájl, esetleg más rendszerhiba történt.

HIBÁK

A hibajelentések e-mail-en a bug-gnu-utils [AT] prep.edu. címre küldendők. Győződjön meg róla, hogy a ’’grep’’ szó szerepel valahol a ’’Subject:’’ mezőben.

Nagy ismétlési számok a {m,n} ismétlési operátorban nagy memóriafelhasználást eredményezhetnek. Továbbá néhány más bonyolult szabályos kifejezés exponenciálisan növő időt és tárhelyet követelhet, és azt eredményezheti, hogy a grep kifut a memóriából.

A visszahivatkozások nagyon lassúak és exponenciálisan növő futásidőt igényelnek.

MAGYAR FORDÍTÁS

Horváth András <horvatha [AT] rs1.hu>