Příkaz egrep pro Linux

Aktualizováno: V operačních systémech typu Unix vyhledává příkaz egrep textový vzor pomocí rozšířených regulárních výrazů. Spuštění příkazu egrep je ekvivalentní spuštění příkazu grep s volbou -E.

Tato stránka se zabývá verzí příkazu egrep pro systém GNU/Linux.

Syntaxe

egrep PATTERN 

Možnosti

-A NUM,
–after-context=NUM
Vypíše NUM řádků koncového kontextu po odpovídajících řádcích. Umístí řádek obsahující — mezi sousední skupiny shod.
-a, –text Zpracuje binární soubor, jako by to byl text; toto je ekvivalentní volbě –binary-files=text.
-B NUM,
–before-context=NUM
Vytiskne NUM řádků úvodního kontextu před shodnými řádky. Umístí řádek obsahující — mezi sousední skupiny shod.
-C NUM, –context=NUM Vytiskne NUM řádků výstupního kontextu. Umístí řádek obsahující — mezi sousední skupiny shod.
-b, –byte-offset Vytiskne offset bajtů ve vstupním souboru před každým řádkem výstupu.
–binary-files=TYPE Pokud prvních několik bajtů souboru naznačuje, že soubor obsahuje binární data, předpokládejte, že soubor je typu TYPE. Ve výchozím nastavení je TYPE binární a grep obvykle vypíše buď jednořádkovou zprávu, že binární soubor odpovídá, nebo žádnou zprávu, pokud žádná shoda neexistuje. Pokud je TYPE bez shody, grep předpokládá, že binární soubor neodpovídá; to je ekvivalentní volbě -I. Pokud je TYPE text, grep zpracuje binární soubor, jako by to byl text; to je ekvivalentní volbě -a. Varování: grep –binary-files=text může vypisovat binární smetí, což může mít nepříjemné vedlejší účinky, pokud je výstupem terminál a pokud terminálový ovladač interpretuje některé z nich jako příkazy.
–colour,
–color
Obklopí odpovídající řetězec značkou find v proměnné prostředí GREP_COLOR. KDYŽ může být ‚nikdy‘, ‚vždy‘ nebo ‚automaticky‘
-c, –count Potlačí normální výstup; místo toho vypíše počet odpovídajících řádků pro každý vstupní soubor. S volbou -v, –invert-match (viz níže) spočítejte neshodující se řádky.
-D ACTION,
–zařízení=ACTION
Pokud je vstupní soubor zařízení, FIFO nebo socket, použijte ke zpracování ACTION. Ve výchozím nastavení je ACTION čtení, což znamená, že zařízení jsou čtena, jako by to byly běžné soubory. Pokud je ACTION skip, jsou zařízení tiše přeskočena.
-d ACTION,
–directories=ACTION
Pokud je vstupním souborem adresář, použijte ke zpracování ACTION. Ve výchozím nastavení je nastaveno čtení ACTION, což znamená, že adresáře jsou čteny, jako by to byly běžné soubory. Pokud je ACTION skip, adresáře se tiše přeskočí. Pokud je ACTION recurse, grep přečte rekurzivně všechny soubory v každém adresáři; to je ekvivalentní volbě -r.
-e PATTERN,
–regexp=PATTERN
Použije PATTERN jako vzor; užitečné pro ochranu vzorů začínajících na „-„.
-F, –fixed-strings Interpretuje PATTERN jako seznam pevných řetězců oddělených novými řádky, které mohou být porovnávány.
-P, –perl-regexp Interpretuje PATTERN jako regulární výraz Perlu.
-f FILE, –file=FILE Získá vzory z FILE, jeden na řádek. Prázdný soubor obsahuje nula vzorů, a proto neodpovídá ničemu.
-G, –basic-regexp Interpretuje PATTERN jako základní regulární výraz (viz níže). Toto je výchozí nastavení.
-H, –with-filename Vypíše název souboru pro každou shodu.
-h, –no-filename Potlačí prefixaci názvů souborů na výstupu, pokud je prohledáváno více souborů.
–help Vypíše stručnou nápovědu.
-I Zpracovat binární soubor, jako by neobsahoval odpovídající data; to je ekvivalentní volbě –binary-files=without-match.
-i, –ignore-case Ignorovat rozlišování velkých a malých písmen v souboru PATTERN i ve vstupních souborech.
-L,
–files-without-match
Potlačí normální výstup; místo toho vypíše název každého vstupního souboru, ze kterého by se normálně žádný výstup nevytiskl. Prohledávání se zastaví při první shodě.
-l, –files-with-matches Potlačí normální výstup; místo toho vypíše název každého vstupního souboru, ze kterého by se normálně žádný výstup nevytiskl. Prohledávání se zastaví při první shodě.
-m NUM,
–max-count=NUM
Zastaví čtení souboru po NUM shodných řádků. Pokud je vstupem standardní vstup z regulárního souboru a výstupem je NUM odpovídajících řádků, grep zajistí, aby se standardní vstup před ukončením umístil za poslední odpovídající řádek bez ohledu na přítomnost koncového kontextového řádku. To umožňuje volajícímu procesu pokračovat ve vyhledávání. Když grep skončí po NUM odpovídajících řádků, vypíše všechny koncové kontextové řádky. Pokud je použita také volba -c nebo –count, grep nevypíše počet větší než NUM. Je-li použita také volba -v nebo –invert-match, grep se zastaví po vypsání NUM neshodných řádků.
–mmap Pokud je to možné, použijte ke čtení vstupu systémové volání mmap namísto výchozího systémového volání read. V některých situacích přináší –mmap lepší výkon. Parametr –mmap však může způsobit nedefinované chování (včetně výpisů jádra), pokud se vstupní soubor během práce grepu zmenší nebo pokud dojde k I/O chybě.
-n, –line-number Předepište každý řádek výstupu číslem řádku v jeho vstupním souboru.
-o, –only-matching Zobrazí pouze tu část odpovídajícího řádku, která odpovídá PATTERN.
–label=LABEL Zobrazí vstup skutečně pocházející ze standardního vstupu jako vstup pocházející ze souboru LABEL. To je užitečné zejména pro nástroje jako zgrep, např. gzip -cd foo.gz |grep -H –label=foo něco
–line-buffered Použije vyrovnávací paměť řádků. To může mít za následek snížení výkonu.
-q, –quiet, –silent Buďte potichu; nezapisujte nic na standardní výstup. Okamžitě skončí s nulovým stavem, pokud je nalezena nějaká shoda, a to i v případě, že byla zjištěna chyba. Viz také volbu -s nebo –no-messages.
-R, -r, –recursive Přečte všechny soubory v každém adresáři, rekurzivně; to je ekvivalentní volbě -d recurse. Modified by:
–include=PATTERN
Prohledává v adresářích pouze soubor odpovídající PATTERN.
–exclude=PATTERN
Prohledává v adresářích přeskočí soubor odpovídající PATTERN.
-s, –no-messages Potlačí chybové zprávy o neexistujících nebo nečitelných souborech. Poznámka k přenositelnosti: na rozdíl od GNU grepu tradiční grep neodpovídal standardu POSIX.2, protože tradiční grep neměl volbu -q a jeho volba -s se chovala jako volba -q GNU grepu. Skripty shellu, které mají být přenositelné na tradiční grep, by se měly vyhnout volbám -q i -s a místo toho by měly přesměrovat výstup na /dev/null.
-U, –binary Soubor(y) považovat za binární. Ve výchozím nastavení pod MS-DOS a Microsoft Windows grep odhaduje typ souboru podle obsahu prvních 32 KB načtených ze souboru. Pokud grep rozhodne, že se jedná o textový soubor, odstraní z původního obsahu souboru znaky CR (aby regulární výrazy s ^ a $ fungovaly správně). Zadáním parametru -U se tento odhad zruší a všechny soubory se načtou a předají mechanismu porovnávání doslovně; pokud je soubor textový a na konci každého řádku jsou dvojice CR/LF, způsobí to, že některé regulární výrazy selžou. Tato volba nemá žádný vliv na jiných platformách než MS-DOS a MS-Windows.
-u, –unix-byte-offsets Zobrazí bajtové offsety v unixovém stylu. Tento přepínač způsobí, že grep bude hlásit bajtové offsety, jako by se jednalo o textový soubor unixového typu, tj. s odstraněnými znaky CR. To vede k výsledkům shodným se spuštěním grepu na unixovém počítači. Tato volba nemá žádný účinek, pokud není použita také volba -b; na jiných platformách než MS-DOS a MS-Windows nemá žádný účinek.
-V, –version Vypíše číslo verze grepu do standardní chyby. Toto číslo verze by mělo být uvedeno ve všech hlášeních o chybách (viz níže).
-v, –invert-match Invertovat smysl porovnávání, aby se vybraly řádky, které se nepodobají.
-w, –word-regexp Vybrat pouze ty řádky, které obsahují shody tvořící celá slova. Test spočívá v tom, že odpovídající podřetězec musí být buď na začátku řádku, nebo mu musí předcházet neslovní složkový znak. Podobně musí být buď na konci řádku, nebo za ním musí následovat neslovní složkový znak. Znaky slovní složky jsou písmena, číslice a podtržítko.
-x, –line-regexp Vyberte pouze ty shody, které přesně odpovídají celému řádku.
-y Zastaralé synonymum pro -i.
-Z, –null Vypíše nulový bajt (ASCII znak NULL) místo znaku, který obvykle následuje za názvem souboru. Například grep -lZ vypíše nulový bajt za každým názvem souboru místo obvyklého nového řádku. Díky této volbě je výstup jednoznačný i v případě, že názvy souborů obsahují neobvyklé znaky, jako jsou nové řádky. Tuto volbu lze použít s příkazy jako find -print0, perl -0, sort -z a xargs -0 ke zpracování libovolných názvů souborů, dokonce i těch, které obsahují znaky nového řádku.

Regulární výrazy

Regulární výraz je vzor, který popisuje množinu řetězců. Regulární výrazy jsou konstruovány obdobně jako aritmetické výrazy a používají různé operátory ke spojování menších výrazů.

Grep rozumí dvěma různým verzím syntaxe regulárních výrazů: „základní“ a „rozšířenou“. V GNU grepu není rozdíl v dostupných funkcích při použití obou syntaxí. V jiných implementacích jsou základní regulární výrazy méně výkonné. Následující popis se týká rozšířených regulárních výrazů, které se používají v egrepu; rozdíly pro základní regulární výrazy jsou shrnuty následně.

Základními stavebními kameny jsou regulární výrazy, které odpovídají jednomu znaku. Většina znaků, včetně všech písmen a číslic, jsou regulární výrazy, které odpovídají samy sobě. Jakýkoli metaznak se zvláštním významem může být uvozen tak, že se před něj vloží zpětné lomítko.

Výraz v závorce je seznam znaků uzavřený znakem . Shoduje se s libovolným jednotlivým znakem v tomto seznamu; pokud je prvním znakem seznamu znak caret ^, pak se shoduje s libovolným znakem, který v seznamu není. Regulární výraz se například shoduje s libovolnou jednotlivou číslicí.

V rámci závorkového výrazu se výraz rozsahu skládá ze dvou znaků oddělených spojovníkem („-„). Shoduje se s libovolným jednotlivým znakem, který se řadí mezi tyto dva znaky včetně, s použitím kolizní posloupnosti a znakové sady daného locale. Například ve výchozím lokálním jazyce C je ekvivalentní výrazu . Mnoho lokálních jazyků řadí znaky ve slovníkovém pořadí a v těchto jazycích často není ekvivalentem ; může být například ekvivalentem ,. Chcete-li získat tradiční interpretaci výrazů se závorkami, můžete použít lokální prostředí C nastavením proměnné prostředí LC_ALL na hodnotu C.

Nakonec jsou v rámci výrazů se závorkami předdefinovány určité pojmenované třídy znaků, a to následovně. Jejich názvy se vysvětlují samy a jsou to , , , , , , , , , a . Například ] znamená , s tím rozdílem, že druhý tvar závisí na lokalizaci jazyka C a kódování znaků ASCII, zatímco první tvar je na lokalizaci a znakové sadě nezávislý. (Všimněte si, že závorky v těchto názvech tříd jsou součástí symbolických názvů a musí být uvedeny navíc k závorkám ohraničujícím seznam závorek). Většina metaznaků ztrácí uvnitř seznamů svůj speciální význam. Chcete-li zařadit literální znak ], umístěte jej do seznamu jako první. Podobně chcete-li zařadit literál ^, umístěte jej kamkoli jinam než na první místo. A konečně, chcete-li zahrnout literál -, umístěte jej jako poslední.

Tečka . odpovídá libovolnému jednotlivému znaku. Symbol \w je synonymem pro ] a \W je synonymem pro ].

Caret ^ a znak dolaru („$“) jsou metaznaky, které odpovídají prázdnému řetězci na začátku a na konci řádku. Symboly \< a \> odpovídají prázdnému řetězci na začátku a na konci slova. Symbol \b odpovídá prázdnému řetězci na okraji slova a \B odpovídá prázdnému řetězci za předpokladu, že se nenachází na okraji slova.

Po regulárním výrazu může následovat jeden z několika operátorů opakování:

? Předchozí položka je nepovinná a bude přiřazena nejvýše jednou.
* Předchozí položka bude přiřazena nula nebo vícekrát.
+ Předchozí položka bude přiřazena jedenkrát nebo vícekrát.
{n} Předchozí položka bude přiřazena přesně n-krát.
{n,} Předchozí položka bude přiřazena n nebo vícekrát.
{n,m} Předchozí položka je porovnána alespoň n-krát, ale ne více než m-krát.

Dva regulární výrazy lze spojit; výsledný regulární výraz odpovídá libovolnému řetězci vytvořenému spojením dvou podřetězců, které odpovídají spojeným podvýrazům.

Dva regulární výrazy lze spojit infixovým operátorem |; výsledný regulární výraz odpovídá libovolnému řetězci, který odpovídá kterémukoli z těchto podvýrazů.

Spojování má přednost před spojováním, které má zase přednost před střídáním. Celý podvýraz může být uzavřen do závorek, aby se tato pravidla přednosti zrušila.

Zpětný odkaz \n, kde n je jedna číslice, odpovídá podřetězci, kterému předtím odpovídal n-tý podvýraz regulárního výrazu v závorce.

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

Tradiční egrep nepodporoval metaznak { a některé implementace egrepu místo něj podporují \{, takže přenositelné skripty by se měly vyhýbat { ve vzorech egrepu a měly by používat k porovnání doslovné {.

GNU egrep se snaží podporovat tradiční použití tím, že předpokládá, že { není speciální, pokud by bylo začátkem neplatné specifikace intervalu. Například příkaz shellu egrep ‚{1‘ vyhledá dvouznakový řetězec {1, místo aby ohlásil syntaktickou chybu v regulárním výrazu. POSIX.2 toto chování umožňuje jako rozšíření, ale přenositelné skripty by se mu měly vyhnout.

Proměnné prostředí

Chování příkazu Grep je ovlivněno následujícími proměnnými prostředí:

Místo LC_foo je určeno zkoumáním tří proměnných prostředí LC_ALL, LC_foo, LANG v tomto pořadí. První z těchto proměnných, která je nastavena, určuje locale. Pokud například není nastavena LC_ALL, ale LC_MESSAGES je nastavena na pt_BR, pak se pro locale LC_MESSAGES použije brazilská portugalština. Pokud není nastavena žádná z těchto proměnných prostředí, nebo pokud není nainstalován katalog locale, nebo pokud grep nebyl zkompilován s podporou národních jazyků (NLS), použije se locale C.

GREP_OPTIONS

Tato proměnná určuje výchozí volby, které se umístí před všechny explicitní volby. Pokud je například GREP_OPTIONS ‚–binary-files=without-match –directories=skip‘, grep se bude chovat, jako kdyby byly obě volby –binary-files=without-match a –directories=skip zadány před všemi explicitními volbami. Specifikace možností se oddělují bílými znaky. Zpětné lomítko escapuje další znak, takže může být použito pro zadání volby obsahující bílé místo nebo zpětné lomítko.

GREP_COLOR

Určuje značku pro zvýraznění.

LC_ALL, LC_COLLATE, LANG

Tyto proměnné určují lokál LC_COLLATE, který určuje srážecí posloupnost používanou pro interpretaci rozsahových výrazů jako .

LC_ALL, LC_CTYPE, LANG

Tyto proměnné určují lokál LC_CTYPE, který určuje typ znaků, např, které znaky jsou bílé.

LC_ALL, LC_MESSAGES, LANG

Tyto proměnné určují locale LC_MESSAGES, které určuje jazyk, který grep používá pro zprávy. Výchozí locale C používá pro zprávy americkou angličtinu.

POSIXLY_CORRECT

Je-li nastaveno, chová se grep tak, jak vyžaduje POSIX.2; jinak se grep chová spíše jako ostatní programy GNU. POSIX.2 vyžaduje, aby se s volbami, které následují za názvy souborů, zacházelo jako s názvy souborů; ve výchozím nastavení jsou takové volby permutovány na začátek seznamu operandů a zachází se s nimi jako s volbami. POSIX.2 také vyžaduje, aby byly nerozpoznané volby diagnostikovány jako „nelegální“, ale protože ve skutečnosti nejsou v rozporu se zákonem, je výchozí diagnóza „neplatné“. POSIXLY_CORRECT také zakazuje _N_GNU_nonoption_argv_flags_, popsaný níže.

_N_GNU_nonoption_argv_flags_

(Zde N je číselné ID procesu grep.) Pokud je i-tý znak hodnoty této proměnné prostředí 1, nepovažujte i-tý operand grepu za volbu, i když se tak tváří. Shell může tuto proměnnou vložit do prostředí pro každý spuštěný příkaz a určit, které operandy jsou výsledkem expanze zástupných znaků názvů souborů, a proto by neměly být považovány za volby. Toto chování je k dispozici pouze s knihovnou GNU C, a to pouze v případě, že není nastaveno POSIXLY_CORRECT.

Příklady

egrep "support|help|windows" myfile.txt

Vyhledá vzory podpůrné nápovědy a oken v souboru myfile.txt.

egrep '^+$' myfile.txt

Vyhledá všechny řádky v souboru myfile.txt, které začínají řádek abecedním slovem, které zároveň řádek ukončuje.

egrep -c '^begin|end$' myfile.txt

Spočítá počet řádků v souboru myfile.txt, které začínají slovem ‚begin‘ nebo končí slovem ‚end‘.

fgrep – Filtruje text, který odpovídá řetězci pevných znaků.
grep – Filtruje text, který odpovídá regulárnímu výrazu.
sed – Nástroj pro filtrování a transformaci textu.
sh – Interpretátor příkazů Bourneova shellu.

Počítá počet řádků v souboru myfile.txt.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.