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@prep.ai.mit.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@rs1.szif.hu>