GREP(1) GREP(1)
NAME
grep, egrep, fgrep - tiskne radky, ktere odpovidaji zadanemu vzoru
PREHLED
grep [volby] VZOR [SOUBOR...]
grep [volby] [-e VZOR | -f SOUBOR] [SOUBOR...]
POPIS
Grep prohledava zadany vstup SOUBOR (nebo standardni vstup, pokud nej-
sou zadany zadne soubory nebo soubor -) a hleda radky obsahujici zadany
VZOR. Ve vychozim nastaveni grep vypisuje radky, ktere vzoru
odpovidaji.
Dostupne jsou navic dve varianty programu - egrep a fgrep. Chovani
programu egrep je stejne jako grep -E, chovani programu fgrep je stejne
jako grep -F.
VOLBY
-A POCET, --after-context=POCET
Tiskni POCET radku ktere nasleduji po platnem (odpovidajicim)
radku.
-a, --text
Pracuj s binarnim souborem jako by to byl text; ekvivalentni k
volbe --binary-files=text
-B POCET, --before-context=POCET
Tiskni POCET radku ktere predchazeji platnemu radku.
-C [POCET], -POCET, --context[=POCET]
Tiskni POCET radku (vychozi pocet je 2) ke kazdemu platneho
radku.
-b, --byte-offset
Tiskni offset bajtu ve vstupnim souboru pred kazdym radkem
vystupu.
--binary-files=TYP
Jestlize podle prvnich nekolika bajtu obsahuje soubor binarni
data, predpokladej, ze je typu TYP. Vychozim nastavenim TYP je
binary a grep standardne vypise bud jednoradkovou zpravu, ze
binarni soubor odpovida, nebo zadnou zpravu pokud neodpovida.
Jestlize je TYP without-match, grep predpoklada ze binarni
soubory neodpovidaji; je to stejne jako volba -I Jestlize je TYP
text, grep zpracovava binarni soubor jako by to byl text; stejne
jako volba -a. Pozor: grep --binary-files=text muze zpusobit,
ze se budou vypisovat nesmyslne binarni znaky, coz muze mit
neprijemne vedlejsi ucinky pokud je vystupem terminal a nektere
znaky se v nem zacnou brat jako prikazy.
-c, --count
Potlac normalni vystup; misto toho napis pocet odpovidajicich
radku pro kazdy vstupni soubor. S volbou -v, --invert-match
(viz nize), pocitej neodpovidajici radky.
-d AKCE, --directories=AKCE
Pokud je vstupnim souborem adresar, pouzij AKCI k jeho zpra-
covani. Vychozim nastavenim AKCE je read, to znamena, ze
adresare se ctou jako by to byly bezne soubory. Jestlize AKCE
je skip, adresare se mlcky preskoci. Jestlize AKCE je recurse,
grep cte rekurzivne vsechny soubory v kazdem adresari; je to
stejne jako volba -r
-E, --extended-regexp
Povazuj VYRAZ za rozsireny regularni vyraz (viz nize).
-e VYRAZ, --regexp=VYRAZ
Jako vzor pouzij VYRAZ; uzitecne pro zachovani vzoru
zacinajicich -.
-F, --fixed-strings
VYRAZ je seznam pevnych retezcu oddelenych znaky konce radku, ze
kterych muze odpovidat kterykoliv.
-f SOUBOR, --file=SOUBOR
Nacte vzory ze souboru SOUBOR, na kazdem radku jeden. Prazdne
radky obsahuji nulove vzory a tedy neodpovidaji nicemu.
-G, --basic-regexp
Povazuj VYRAZ za zakladni regularni vyraz (viz nize). Toto je
vychozi nastaveni.
-H, --with-filename
Tiskni jmeno souboru pro kazdou shodu.
-h, --no-filename
Potlac vkladani jmen souboru do vystupu pri prohledavani vice
souboru.
--help Vytiskni strucnou napovedu.
-I Zpracuj binarni soubor jako by neobsahoval shody; to je stejne
jako volba --binary-files=without-match
-i, --ignore-case
Nerozlisuj velka a mala pismena ve VYRAZU ani ve vstupnich sou-
borech.
-L, --files-without-match
Potlac normalni vystup; misto toho tiskni jmeno kazdeho souboru,
ze ktereho by se jinak zadny vystup netiskl. Prohledavani skonci
s prvni shodou.
-l, --files-with-matches
Potlac normalni vystup; misto toho tiskni jmeno kazdeho souboru,
ze ktereho by se jinak tiskl nejaky vystup. Prohledavani skonci
s prvni shodou.
--mmap Pokud je to mozne, pouzij systemove volani mmap(2) ke cteni
vstupnich dat, misto bezneho volani read(2) --mmap zlepsit
vykon. Na druhou stranu --mmap muze zpusobit potize (vcetne core
dump) jestlize se vstupni soubor za behu programu grep zmensi
nebo pokud nastane chyba vstupu/vystupu.
-n, --line-number
Pred kazdy radek vystupu pridej jeho cislo v prislusnem vstupnim
souboru.
-q, --quiet, --silent
Tise; potlac normalni vystup. Prohledavani skonci s prvni
shodou. Viz take volbu -s or --no-messages uvedenou dale.
-r, --recursive
Rekurzivne nacti vsechny soubory v kazdem adresari; to je stejne
jako volba -d recurse
-s, --no-messages
Potlac chybove hlasky o neexistujicich nebo necitelnych sou-
borech. Poznamka o prenositelnosti: na rozdil od GNU grep,
tradicni grep neodpovidal specifikaci POSIX.2, protoze nemel
volbu -q a jeho volba -s se chovala jako volba GNU -q GNU grep.
Shellove skripty ktere maji byt prenositelne na tradicni grep by
se mely voleb -q a -s vyvarovat a presmerovat misto toho vystup
do /dev/null.
-U, --binary
Pracuj se soubory jako s binarnimi. Normalne typ souboru pod MS-
DOS a MS-Windows urcuje grep tak, ze se podiva na prvnich
prectenych 32KB dat. Kdyz grep rozhodne ze soubor je textovy,
vynecha z puvodniho obsahu znaky CR (aby neprestaly spravne fun-
govat regularni vyrazy obsahujici ^ a $ ). Uvedenim volby -U se
toto pravidlo rusi a vsechny soubory se predaji porovnavacimu
mechanismu doslovne. Pokud obsahuje soubor text s pary CR/LF na
koncich radku, zpusobi to, ze nektere regularni vyrazy prestanou
fungovat. Tato volba nema zadny ucinek na platformach jinych nez
MS-DOS a MS-Windows.
-u, --unix-byte-offsets
Hlasit offsety jako v Unixu. Tento prepinac zajisti, ze grep
bude tisknout offsety bajtu jako by soubor byl textovy soubor v
Unixu, tedy bez znaku CR. To znamena, ze vysledky grep budou
stejne jako v systemu Unix. Tato volba nema zadny efekt bez
soucasneho pouziti volby -b; take nema efekt na platformach
jinych nez MS-DOS a MS-Windows.
-V, --version
Vytiskni verzi grep na chybovy vystup. Verze by mela byt uvedena
ve vsech hlasenich chyb (viz nize).
-v, --invert-match
Prevrat vyznam shody - vytisknou se radky ktere vzoru neod-
povidaji.
-w, --word-regexp
Vyber jen radky ve kterych se shoduje cele samostatne slovo.
Odpovidajici retezec musi byt bud na zacatku radku nebo mit pred
sebou znak ktery se nebere jako soucast slova. Podobne musi
retezec byt bud na konci radku nebo za nim musi nasledovat znak
ktery se nebere jako soucast slova. Znaky ktere se povazuji za
casti slov jsou pismena, cislice a podtrzitko.
-x, --line-regexp
Vyber jen shody pres cely radek.
-y Zastarala alternativa pro -i.
-Z, --null
Vytiskni nulovy bajt (znak ASCII NUL) misto znaku ktery nasle-
duje po jmenech souboru. Napriklad grep -lZ pise nulovy bajt po
kazdem nazvu souboru misto obvykleho znaku konce radku. Tato
volba zajisti jednoznacnost vystupu i v pripade, ze nazvy sou-
boru obsahuji neobvykle znaky jako znaky konce radku. Tuto volbu
lze pouzit pro prikazy jako find -print0, perl -0, sort -z a
xargs -0, ke zpracovani libovolnych jmen souboru vcetne tech,
ktere obsahuji znaky konce radku.
REGULARNI VYRAZY
Regularni vyraz je vzor, ktery popisuje mnozinu retezcu. Regularni
vyrazy se pisi (podobne jako aritmeticke vyrazy) pomoci ruznych
operatoru, ktere davaji dohromady mensi vyrazy.
Grep zna dve ruzne verze syntaxe pro regularni vyrazy: "zakladni" a
"rozsirene." Pro GNU grep, neni v techto dvou verzich zadny rozdil co
se tyce funkcnosti. V jinych implementacich jsou zakladni regularni
vyrazy slabsi. Nasledujici popis plati pro rozsirene regularni vyrazy;
rozdily pro zakladni regularni vyrazy jsou uvedeny na konci.
Zakladnim stavebnim kamenem jsou regularni vyrazy, ktere odpovidaji
jedinemu znaku. Vetsina znaku, vcetne vsech pismen a cislic, jsou samy
o sobe regularni vyrazy ktere se shoduji samy se sebou. Kterykoli
metaznak se zvlastnim vyznamem muze byt uveden ve svem puvodnim vyznamu
tak, ze se pred nej napise zpetne lomitko.
Seznam znaku v [ a ] odpovida jakemukoli jednotlivemu znaku ze seznamu;
kdyz je prvnim znakem seznamu striska ^ potom seznam odpovida
jakemukoli znaku ktery v seznamu neni Napriklad regularni vyraz
[0123456789] odpovida jedne libovolne cislici. Rozsah znaku lze speci-
fikovat prvnim a poslednim znakem, oddelenymi pomlckou. Jsou take
prednastaveny nektere skupiny znaku: [:alnum:], [:alpha:], [:cntrl:],
[:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:],
[:upper:] a [:xdigit:] jsou postupne pismena a cislice, pismena, kon-
trolni znaky, cislice, obrazkove znaky, mala pismena, tisknutelne
znaky, interpunkcni znamenka, mezery, velka pismena a cislice
sestnactkove soustavy. Napriklad [[:alnum:]] je stejne jako [0-9A-Za-
z], az na to, ze druhy vzor zavisi na locale POSIX a kodovani znaku
ASCII, zatimco prvni je nezavisly na locale i znakove sade (zavorky v
nazvech skupin jsou soucasti jejich symbolicky jmen a musi byt uvedene
uvnitr zavorek uzavirajicich seznam). Vetsina metaznaku ztraci v sez-
namech svuj zvlastni vyznam. K pridani znaku ] do seznamu staci uvest
ho jako prvni. Podobne znak ^ staci uvest na jinem nez prvnim miste.
Konecne znak - se uvede jako posledni.
Tecka . odpovida jednomu libovolnemu znaku. Znak \w je synonymem pro
[[:alnum:]] a \W je synonymem pro [^[:alnum]].
Striska ^ a znak dolaru $ jsou metaznaky, ktere odpovidaji prazdnemu
retezci na zacatku, resp. na konci radku. Symboly \< a \> oznacuji
prazdne retezce na zacatku, resp. na konci slova. Symbol \b odpovida
prazdnemu retezci na hranici slova a \B odpovida prazdnemu retezci
ktery neni na hranici slova.
Regularni vyraz muze mit za sebou jeden z opakovacich operatoru:
? Predchazejici polozka je volitelna a obsazena nejvyse jednou
(tj. jednou nebo ani jednou).
* Predchazejici polozka je volitelna a obsazena v libovolnem poctu
(tj. nula- nebo vicekrat).
+ Predchazejici polozka je obsazena jednou nebo vicekrat.
{n} Predchazejici polozka je obsazena prave n krat.
{n,} Predchazejici polozka je obsazena n nebo vicekrat.
{n,m} Predchazejici polozka je obsazena alespon n krat, ale ne vice
nez m krat.
Dva regularni vyrazy se daji primo spojit; vysledny regularni vyraz
odpovida libovolnemu retezci vzniklemu spojenim dvou jinych, ktere
odpovidaji puvodnim dvema regularnim vyrazum.
Dva regularni vyrazy lze slozit pevnym operatorem |; vysledny regularni
vyraz odpovida retezci, ktery se shoduje s kterymkoliv z uvedenych
regularnich vyrazu.
Opakovani ma prednost pred spojenim, ktere ma zase prednost pred
stridanim. Cely podvyraz staci uzavrit do zavorek aby se tato prednost
zrusila.
Zpetny odkaz \n, kde n je cislice, odpovida podretezci, ktery byl
predtim porovnavan a vyhodnocen jako shodny s n-tym podvyrazem
oddelenym zavorkami od zbytku regularniho vyrazu.
V zakladnich regularnich vyrazech ztraceji metaznaky ?, +, {, |, (, a )
sve zvlastni vyznamy; misto nich se daji pouzit verze se zpetnym
lomitkem \?, \+, \{, \|, \(, a \).
Tradicni egrep nepodporoval metaznak { a nektere implementace egrep
misto toho podporovaly \{. Prenositelne skripty by tedy nemely { ve
vzorech pro egrep pouzivat a misto toho k porovnani se znakem {
pouzivat seznam s jedinym znakem [{].
GNU egrep se snazi tradicni zpusob pouziti podporovat tak, ze { nebere
jako metaznak pokud by mel byt zacatkem chybne specifikace rozsahu.
Napriklad prikaz egrep '{1' hleda dvouznakovy retezec {1 misto toho,
aby hlasil chybu syntaxe v regularnim vyrazu. POSIX.2 dovoluje toto
chovani jako rozsireni, ale prenositelne skripty by na nej nemely
spolehat.
PROMENNE PROSTREDI
GREP_OPTIONS
Tato promenna nastavuje volby, ktere se pridaji na zacatek
dalsich dodatecnych voleb. Napriklad kdyby GREP_OPTIONS bylo
'--binary-files=without-match --directories=skip', grep se chova
jako kdyby volby --binary-files=without-match a --directo-
ries=skip byly uvedene pred ostatnimi dodatecnymi volbami. Nas-
taveni voleb jsou oddelena bilymi znaky (napr. mezerami nebo
tabulatory). Zpetne lomitko uvadi dalsi znak, takze jej lze
pouzit pro volbu obsahujici bile znaky nebo zpetna lomitka.
LC_ALL, LC_MESSAGES, LANG
Tyto promenne nastavuji locale LC_MESSAGES urcujici jazyk,
kterym bude grep tisknout hlaseni. Locale je nastaveno prvni
existujici promennou. Pokud neexistuje zadna, neni nainstalovan
prelozeny katalog hlasek nebo nebyl grep zkompilovan s jazykovou
podporou (NLS), pouzije se americka anglictina.
LC_ALL, LC_CTYPE, LANG
Tyto promenne nastavuji locale LC_CTYPE urcujici typ znaku, tedy
ktere znaky patri k tzv. bilym. Locale je nastaveno prvni exis-
tujici promennou. Pokud neexistuje zadna, neni nainstalovan
katalog locale nebo nebyl grep zkompilovan s jazykovou podporou
(NLS), pouzije se locale POSIX.
POSIXLY_CORRECT
Pokud je nastaveno, grep se chova podle pozadavku POSIX.2; jinak
se chova grep vice jako ostatni programy GNU. POSIX.2 vyzaduje,
aby volby nasledujici za jmeny souboru byly brany uz jen jako
jmena souboru; normalne se takove volby presunou na zacatek sez-
namu parametru a berou se jako volby. POSIX.2 dale vyzaduje aby
se nezname volby pokladaly za "illegal", ale protoze nejsou tak
uplne protizakonne, normalne se prohlasi za "invalid".
POSIXLY_CORRECT take rusi _N_GNU_nonoption_argv_flags_ popsane
dale.
_N_GNU_nonoption_argv_flags_
(Zde N je cislo procesu grep). Jestlize hodnota i-teho znaku
teto promenne je 1, neber i-ty parametr grep jako volbu, i kdyby
to vypadalo, ze to volba je. Shell muze dat tuto promennou do
prostredi pro kazdy prikaz ktery spousti, aby urcil, ktere
parametry jsou vysledkem rozvinuti jmen souboru "zolikovymi"
znaky (* a ?) a nemaji byt brany jako volby. Toho chovani je
mozne jen s knihovnou GNU C a jen kdyz neni nastaveno
POSIXLY_CORRECT.
NAVRATOVE HODNOTY
Normalne je vystupni hodnota 0 kdyz jsou nalezeny shody nebo 1 kdyz
zadne nalezeny nejsou (volba -v prevraci smysl vystupni hodnoty).
Vystupni hodnota 2 znamena, ze jsou chyby syntaxe ve vzoru, nepristupne
soubory, nebo jine systemove chyby.
VADY
Hlaseni o vadach posilejte na bug-gnu-utils@gnu.org (anglicky).
Ujistete se, ze nekde v poli "Subject:" bude "grep".
Velke pocty opakovani v konstrukci {m,n} muzou vest k tomu, ze grep
pouzije dost pameti. Navic nektere jine neobvykle regularni vyrazy
muzou mit exponencialni naroky na cas a prostor a zpusobit ze grep
spotrebuje vsechnu pamet.
Zpetne odkazy jsou velmi pomale a doba jejich zpracovani muze rust
exponencialne.
PRELOZIL
Tomas Andrle (tomas.andrle@pslib.cz).
GNU Project 2000/02/26 GREP(1)