GREP(1)

JMÉNO
grep, egrep, fgrep - tiskne řádky, které odpovídají zadanému vzoru

POUŽITÍ
grep [volby] VZOR [SOUBOR...]
grep [volby] [-e VZOR | -f SOUBOR] [SOUBOR...]

POPIS

Grep prohledává zadaný vstup SOUBOR (nebo standardní vstup, pokud nejsou zadány žádné soubory nebo je zadán soubor -) a hledá řádky obsahující zadaný VZOR. Ve výchozím nastavení grep vypisuje řádky, které vzoru odpovídají.

Dostupné jsou navíc dvě varianty programu - egrep a fgrep. Chování programu egrep je stejné jako grep -E, chování programu fgrep je stejné jako grep -F.

VOLBY

-A POČET, --after-context=POČET
    Tiskni POČET řádků, které následují po platném (odpovídajícím) řádku. Mezi souvislé platné výsledky vkládá řádky obsahující --.

-a, --text
    Pracuj s binárním souborem jako by to byl text; ekvivalentní k volbě --binary-files=text.

-B POČET, --before-context=POČET
    Tiskni POČET řádků které předcházejí platnému řádku. Mezi souvislé platné výsledky vkládá řádky obsahující --.

-C POČET, --context=POČET
    Tiskni POČET řádků ke každému platnému řádku. Mezi souvislé platné výsledky vkládá řádky obsahující --.

-b, --byte-offset
    Tiskni offset bajtu ve vstupním souboru před každým řádkem výstupu.

--binary-files=TYP
    Jestliže podle prvních několika bajtů obsahuje soubor binární data, předpokládej, že je typu TYP. Výchozím nastavením TYP je binary a grep standardně vypíše buď jednořádkovou zprávu, že binární soubor odpovídá, nebo žádnou zprávu pokud neodpovídá. Jestliže je TYP without-match, grep předpokládá, že binární soubory neodpovídají; je to stejné jako volba -I. Jestliže je TYP text, grep zpracovává binární soubor, jako by to byl text; stejné jako volba -a. Pozor: grep --binary-files=text může způsobit, že se budou vypisovat nesmyslné binární znaky, což může mít nepříjemné vedlejší účinky pokud je výstupem terminál a ovladač terminálu začne některé znaky interpretovat jako příkazy.

--colour[=KDY], --color[=KDY]
    Obklopí platný řetězec značkou z proměnné prostředí GREP_COLOR. KDY může být `never', `always' nebo `auto'

-c, --count
    Potlač normální výstup; místo toho napiš počet odpovídajících řádků pro každý vstupní soubor. S volbou -v, --invert-match (viz níže), počítej neodpovídající řádky.

-D AKCE, --devices=AKCE
    Pokud je vstupním souborem zařízení, FIFO nebo socket, použij AKCI k jeho zpracování. Výchozím nastavením AKCE je read, to znamená, že zařízení se čtou jako by to byly běžné soubory. Jestliže AKCE je skip, zařízení se mlčky přeskočí.

-d AKCE, --directories=AKCE
    Pokud je vstupním souborem adresář, použij AKCI k jeho zpracování. Výchozím nastavením AKCE je read, to znamená, že adresáře se čtou jako by to byly běžné soubory. Jestliže AKCE je skip, adresáře se mlčky přeskočí. Jestliže AKCE je recurse, grep čte rekurzivně všechny soubory v každém adresáři; je to stejné jako volba -r.

-E, --extended-regexp
    Považuj VÝRAZ za rozšířený regulární výraz (viz níže).

-e VÝRAZ, --regexp=VÝRAZ
    Jako vzor použij VÝRAZ; užitečné pro zachování vzorů začínajících -.

-F, --fixed-strings
    Považuj VÝRAZ za seznam pevných řetězců oddělených znaky konce řádku, ze kterých může odpovídat kterýkoliv. -P, --perl-regexp Považuj VÝRAZ za regulární výraz Perlu.

-f SOUBOR, --file=SOUBOR
    Načte vzory ze souboru SOUBOR, na každém řádku jeden. Prázdný soubor obsahuje nula vzorů a tedy neodpovídá ničemu.

-G, --basic-regexp
    Považuj VÝRAZ za základní regulární výraz (viz níže). Toto je výchozí nastavení.

-H, --with-filename
    Tiskni jméno souboru pro každou shodu.

-h, --no-filename
    Potlač vkládání jmen souborů do výstupu při prohledávání více souborů.

--help
    Vytiskni stručnou nápovědu.

-I  Zpracuj binární soubor jako by neobsahoval shody; to je stejné jako volba --binary-files=without-match.

-i, --ignore-case
    Nerozlišuj velká a malá písmena ve VÝRAZU ani ve vstupních souborech.

-L, --files-without-match
    Potlač normální výstup; místo toho tiskni jméno každého souboru, ze kterého by se jinak žádný výstup netiskl. Prohledávání skončí s první shodou.

-l, --files-with-matches
    Potlač normální výstup; místo toho tiskni jméno každého souboru, ze kterého by se jinak tiskl nějaký výstup. Prohledávání skončí s první shodou.

-m POČET, --max-count=POČET
    Přestaň číst soubor po dosažení POČTU odpovídajících řádků. Je-li vstupem standardní vstup z obyčejného souboru, a je vytištěno POČET odpovídajících řádků, grep zajistí, že standardní vstup bude před ukončením nastaven právě po posledním odpovídajícím řádku, bez ohledu na přítomnost následujících řádků kontextu. Tak je možné, aby volající proces hledání obnovil. Když grep po dosažení POČTU odpovídajících řádků zastaví, vypíše řádky kontextu, které následují. Pokud je zároveň použita volba -c nebo --count, program grep nevypíše více shod než je POČET. Pokud je zároveň použita volba -v nebo --invert-match program, grep skončí po vypsání POČTU neodpovídajících řádků.

--mmap
    Pokud je to možné, použij systémové volání mmap(2) ke čtení vstupních dat, místo výchozího read(2). V některých případech může --mmap zlepšit výkon. Na druhou stranu --mmap může způsobit nedefinované chování (včetně core dump), jestliže se vstupní soubor za běhu programu grep zmenší nebo pokud nastane chyba vstupu/výstupu.

-n, --line-number
    Před každý řádek výstupu přidej jeho číslo v příslušném vstupním souboru.

-o, --only-matching
    Vypisuj jen tu část odpovídajícího řádku, která je odpovídá VZORU.

--label=LABEL
    Zobrazuj vstup pocházející ze standardního vstupu jakoby pocházel ze souboru LABEL. To je zvláště užitečné pro nástroje jako je zgrep, např. gzip -cd foo.gz |grep --label=foo něco

--line-buffering
    Použij line buffering, může negativně ovlivnit výkon.

-q, --quiet, --silent
    Tiše; potlač normální výstup. Prohledávání skončí s první shodou, s návratovou hodnotou nula, i když byla detekována nějaká chyba. Viz také volba -s nebo --no-messages uvedená dále.

-R, -r, --recursive
    Rekurzivně načti všechny soubory v každém adresáři; to je stejné jako volba -d recurse.

--include=VZOR
    Rekurzivně procházej adresáře, prohledávej pouze soubory odpovídající VZORU.

--exclude=VZOR
    Rekurzivně procházej adresáře, přeskoč soubory odpovídající VZORU.

-s, --no-messages
    Potlač chybové hlášky o neexistujících nebo nečitelných souborech. Poznámka o přenositelnosti: na rozdíl od GNU grepu, tradiční grep neodpovídal specifikaci POSIX.2, protože neměl volbu -q a jeho volba -s se chovala jako volba -q GNU grepu. Shellové skripty které mají být přenositelné na tradiční grep, by se měly voleb -q a -s vyvarovat a přesměrovat místo toho výstup do /dev/null.

-U, --binary
    Pracuj se soubory jako s binárními. Normálně typ souboru pod MS-DOS a MS-Windows určuje grep tak, že se podívá na prvních 32KB dat přečtených ze souboru. Když grep rozhodne, že soubor je textový, vynechá z původního obsahu znaky CR (aby nepřestaly správně fungovat regulární výrazy obsahující ^ a $ ). Uvedením volby -U se toto pravidlo ruší a všechny soubory se předají porovnávacímu mechanismu doslovně. Pokud obsahuje soubor text s páry CR/LF na koncích řádků, způsobí to, že některé regulární výrazy přestanou fungovat. Tato volba nemá žádný účinek na platformách jiných než MS-DOS a MS-Windows.

-u, --unix-byte-offsets
    Hlásit offsety jako v Unixu. Tento přepínač zajistí, že grep bude tisknout offsety bajtů jako by soubor byl textový soubor v Unixu, tedy bez znaků CR. To znamená, že výsledky grep budou stejné jako v systému Unix. Tato volba nemá žádný efekt bez současného použití volby -b; také nemá efekt na platformách jiných než MS-DOS a MS-Windows.

-V, --version
    Vytiskni verzi programu grep na chybový výstup. Verze by měla být uvedena ve všech hlášeních chyb (viz níže).

-v, --invert-match
    Převrať význam shody - vyberou se řádky, které vzoru neodpovídají.

-w, --word-regexp
    Vyber jen řádky ve kterých se shoduje celé samostatné slovo. Odpovídající řetězec musí být buď na začátku řádku nebo mít před sebou znak který se nebere jako součást slova. Podobně musí řetězec být buď na konci řádku nebo za ním musí následovat znak který se nebere jako součást slova. Znaky které se považují za části slov jsou písmena, číslice a podtržítko.

-x, --line-regexp
    Vyber jen shody zahrnující celý řádek.

-y  Zastaralá alternativa pro -i.

-Z, --null
    Vytiskni nulový bajt (znak ASCII NUL) místo znaku, který normálně následuje po jménech souborů. Například grep -lZ píše nulový bajt po každém názvu souboru místo obvyklého znaku konce řádku. Tato volba zajistí jednoznačnost výstupu i v případě, že názvy souborů obsahují neobvyklé znaky jako znaky konce řádku. Tuto volbu lze použít pro příkazy jako find -print0, perl -0, sort -z a xargs -0, ke zpracování libovolných jmen souborů včetně těch, které obsahují znaky konce řádku.

REGULÁRNÍ VÝRAZY

Regulární výraz je vzor, který popisuje množinu řetězců. Regulární výrazy se píší (podobně jako aritmetické výrazy) pomocí různých operátorů, které dávají dohromady menší výrazy.

Grep zná dvě různé verze syntaxe pro regulární výrazy: “základní” a “rozšířené.” Pro GNU grep není v těchto dvou verzích žádný rozdíl co se týče funkčnosti. V jiných implementacích jsou základní regulární výrazy slabší. Následující popis platí pro rozšířené regulární výrazy; rozdíly pro základní regulární výrazy jsou uvedeny na konci.

Základním stavebním kamenem jsou regulární výrazy, které odpovídají jedinému znaku. Většina znaků, včetně všech písmen a číslic, jsou samy o sobě regulárními výrazy, které se shodují samy se sebou. Kterýkoli metaznak se zvláštním významem může být uveden ve svém původním významu tak, že se před něj napíše zpětné lomítko.

Seznam znaků v [ a ] odpovídá jakémukoli jednotlivému znaku ze seznamu; když je prvním znakem seznamu stříška ^, potom seznam odpovídá jakémukoli znaku který v seznamu není. Například regulární výraz [0123456789] odpovídá jedné libovolné číslici.

Rozsah znaků lze specifikovat prvním a posledním znakem, oddělenými pomlčkou. Odpovídá jednomu znaku, který je mezi uvedenými dvěma znaky včetně, za použití řazení a znakové sady podle locale. Např. ve výchozím locale C je [a-d] ekvivalentní zápisu [abcd]. V mnoha locale jsou znaky tříděny slovníkově a typicky v nich [a-d] není ekvivalentní [abcd]; může být např. ekvivalentní [aBbCcDd]. Pro použití tradiční interpretace těchto výrazů je možné použít C locale nastavením proměnné prostředí LC_ALL na hodnotu C.

Jsou také přednastaveny některé skupiny znaků: [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:] a [:xdigit:] jsou postupně písmena a číslice, písmena, kontrolní znaky, číslice, obrázkové znaky, malá písmena, tisknutelné znaky, interpunkční znaménka, mezery, velká písmena a číslice šestnáctkové soustavy. Například [[:alnum:]] je stejné jako [0-9A-Za-z], až na to, že druhý vzor závisí na C locale kódování znaků ASCII, zatímco první je nezávislý na locale i znakové sadě (závorky v názvech skupin jsou součástí jejich symbolických jmen a musí být uvedené uvnitř závorek uzavírajících seznam). Většina metaznaků ztrácí v seznamech svůj zvláštní význam. K přidání znaku ] do seznamu stačí uvést ho jako první. Podobně znak ^ stačí uvést na jiném než prvním místě. Konečně znak - se uvede jako poslední.

Tečka . odpovídá jednomu libovolnému znaku. Znak \w je synonymem pro [[:alnum:]] a \W je synonymem pro [^[:alnum]].

Stříška ^ a znak dolaru $ jsou metaznaky, které odpovídají prázdnému řetězci na začátku, resp. na konci řádku. Symboly \< a \> označují prázdné řetězce na začátku, resp. na konci slova. Symbol \b odpovídá prázdnému řetězci na hranici slova a \B odpovídá prázdnému řetězci který není na hranici slova.

Regulární výraz může mít za sebou jeden z opakovacích operátorů:
?   Předcházející položka je volitelná a obsažená nejvýše jednou (tj. jednou nebo ani jednou).
*   Předcházející položka je volitelná a obsažená v libovolném počtu (tj. nula- nebo vícekrát).
+   Předcházející položka je obsažena jednou nebo vícekrát.
{n} Předcházející položka je obsažena právě n krát.
{n,}
    Předcházející položka je obsažena n nebo vícekrát.
{n,m}
    Předcházející položka je obsažena alespoň n krát, ale ne více než m krát.

Dva regulární výrazy se dají přímo spojit; výsledný regulární výraz odpovídá libovolnému řetězci vzniklému spojením dvou jiných, které odpovídají původním dvěma regulárním výrazům.

Dva regulární výrazy lze složit pevným operátorem |; výsledný regulární výraz odpovídá řetězci, který se shoduje s kterýmkoliv z uvedených regulárních výrazů.

Opakování má přednost před spojením, které má zase přednost před střídáním. Celý podvýraz stačí uzavřít do závorek aby se tato přednost zrušila.

Zpětný odkaz \n, kde n je číslice, odpovídá podřetězci, který byl předtím porovnáván a vyhodnocen jako shodný s n-tým podvýrazem odděleným závorkami od zbytku regulárního výrazu.

V základních regulárních výrazech ztrácejí metaznaky ?, +, {, |, (, a ) své zvláštní významy; místo nich se dají použít verze se zpětným lomítkem \?, \+, \{, \|, \(, a \).

Tradiční egrep nepodporoval metaznak { a některé implementace egrep místo toho podporovaly \{. Přenositelné skripty by tedy neměly { ve vzorech pro egrep používat a místo toho k porovnání se znakem { používat seznam s jediným znakem [{].

GNU egrep se snaží tradiční způsob použití podporovat tak, že { nebere jako metaznak, pokud by měl být začátkem chybné specifikace rozsahu. Například příkaz egrep '{1' hledá dvouznakový řetězec {1 místo toho, aby hlásil chybu syntaxe v regulárním výrazu. POSIX.2 dovoluje toto chování jako rozšíření, ale přenositelné skripty by na něj neměly spoléhat.

PROMĚNNÉ PROSTŘEDÍ
Hování grepu je ovlivněno následujícími proměnnými prostředí:

Locale LC_foo je určeno prozkoumáním proměnných prostředí LC_ALL, LC_foo, LANG, v uvedeném pořadí. První z nich, která je nastavená, určí locale. Například pokud není nastavena LC_ALL, ale LC_MESSAGES je nastavena na pt_BR, je pro LC_MESSAGES locale použita brazilská portugalština. C locale je použito pouze tehdy, když není nastavena žádná z těchto proměnných prostředí nebo pokud není nainstalován katalog locale nebo pokud byl grep zkompilován bez podpory národních jazyků (NLS).

GREP_OPTIONS
    Tato proměnná nastavuje výchozí volby, které se přidají na začátek dalších dodatečných voleb. Například kdyby GREP_OPTIONS bylo '--binary-files=without-match --directories=skip', grep by se choval, jako kdyby volby --binary-files=without-match a --directories=skip byly uvedené před ostatními dodatečnými volbami. Nastavení voleb jsou oddělená bílými znaky (např. mezerami nebo tabulátory). Zpětné lomítko escapuje znaky, takže jej lze použít pro volbu obsahující bílé znaky nebo zpětná lomítka.

GREP_COLOR
    Určuje značku pro zvýrazňování.

LC_ALL, LC_COLLATE, LANG
    Tyto proměnné nastavují locale LC_COLLATE, které určuje řazení používané při interpretaci výrazů s rozsahy jako [a-z].

LC_ALL, LC_CTYPE, LANG
    Tyto proměnné nastavují locale LC_CTYPE, které určuje typy znaků, např. které znaky jsou bílé znaky.

LC_ALL, LC_MESSAGES, LANG
    Tyto proměnné nastavují locale LC_MESSAGES určující jazyk, kterým bude grep tisknout hlášení. Výchozí C locale používá americkou angličtinu.

POSIXLY_CORRECT
    Pokud je nastaveno, grep se chová podle požadavků POSIX.2; jinak se grep chová více jako ostatní programy GNU. POSIX.2 vyžaduje, aby volby následující za jmény souborů byly brány už jen jako jména souborů; normálně se takové volby přesunou na začátek seznamu parametrů a berou se jako volby. POSIX.2 dále vyžaduje aby se neznámé volby pokládaly za “ilegální”, ale protože nejsou tak úplně protizákonné, normálně se prohlásí za “invalidní”. POSIXLY_CORRECT také ruší _N_GNU_nonoption_argv_flags_ popsané dále.

_N_GNU_nonoption_argv_flags_
    (Zde N je číslo procesu grep). Jestliže hodnota i-tého znaku této proměnné je 1, neber i-tý parametr grep jako volbu, i kdyby to vypadalo, že to volba je. Shell může dát tuto proměnnou do prostředí pro každý příkaz který spouští, aby určil, které parametry jsou výsledkem rozvinutí jmen souborů "žolíkovými" znaky (* a ?) a nemají být brány jako volby. Toho chování je možné jen s knihovnou GNU C a jen když není nastaveno POSIXLY_CORRECT.

NÁVRATOVÉ HODNOTY

Normálně je výstupní hodnota 0, když jsou nalezeny shody nebo 1 když žádné nalezeny nejsou. Výstupní hodnota je 2, pokud došlo k chybě, ledaže byla použita volba -q nebo --quiet nebo --silent a byla nalezena odpovídající řádka.

CHYBY

Hlášení o chybách posílejte na bug-grep@gnu.org (anglicky).

Velké počty opakování v konstrukci {m,n} můžou vést k tomu, že grep použije dost paměti. Navíc některé jiné neobvyklé regulární výrazy mají exponenciální nároky na čas a prostor a mohou způsobit, že grep spotřebuje všechnu paměť.

Zpětné odkazy jsou velmi pomalé a doba jejich zpracování může růst exponenciálně.