V tomto tutoriálu se seznámíme s "grep" příkaz. Grep znamená G lobální r pravidelné e výraz p otisknout. Jak název napovídá, Grep se používá k vyhledávání textových souborů s regulárními výrazy (krátce regulární výraz ). Vytiskne řádky odpovídající danému vzoru v textovém souboru. Pokud není zadán žádný soubor, grep rekurzivně prohledá daný vzor v souborech v aktuálním adresáři. Grep má dvě varianty, a to egrep a fgrep . Tyto varianty jsou zastaralé, ale jsou poskytovány z důvodu zpětné kompatibility. Místo použití "grep -E" a "grep -F" můžete použít "egrp" a "fgrep". Bez dalších okolků můžeme začít.
Příklady příkazů Grep
Mám soubor s názvem soubor.txt s nějakými náhodnými slovy. Pojďme se podívat na soubor.txt:
$ cat file.txt ostechnix Ostechnix o$technix linux linus unix technology hello world HELLO world
Chcete-li zahájit vyhledávání, zadejte grep a poté co hledáte a odkud hledáte. Například budu hledat řetězec "nix" v souboru.txt. K tomu spustím:
$ grep nix file.txt
Ukázkový výstup:
ostechnix Ostechnix o$technix unix
Jak vidíte ve výše uvedeném výstupu, dostali jsme dvě slova, která obsahují odpovídající vzor „nix“. Pokud hledaný řetězec obsahuje dvě slova, uveďte je v jednoduchých uvozovkách, jak je uvedeno níže.
$ grep 'hello world' file.txt hello world
Můžete také použít -n příznak pro zobrazení čísel řádků ve výstupu:
$ grep -n nix file.txt
Ukázkový výstup:
1:ostechnix 2:Ostechnix 3:o$technix 6:unix
To může být užitečné, když pracujete s opravdu dlouhým kódem.
Upozorňujeme, že grep rozlišuje velká a malá písmena . Například když hledáte "os" , nebude zobrazovat řádky obsahující velká písmena, tj. Os.
Zkontrolujte následující příklad.
$ grep os file.txt ostechnix
Ale v file.txt mám další slovo s názvem "Ostechnix", ale grep ho neuvedl.
Pokud však chcete ignorovat malá a velká písmena, můžete použít "-i" příznak jako níže.
$ grep -i os file.txt ostechnix Ostechn1x
$ grep -i 'hello world' file.txt hello world HELLO world
Nyní se grep nestaral o malá a velká písmena a dostali jsme slova, která ve výsledku obsahují velká i malá písmena.
Můžeme také převést výstup příkazu do grep. Podívejte se na následující příklad.
$ cat file.txt | grep os ostechnix
Nyní se podívejme, co máme. Výstup souboru.txt je přenesen do grep a slova obsahující písmena "os" v souboru.txt byla zobrazena.
Můžeme také použít některé speciální znaky nebo regulární výrazy v grep.
- ^ - hledat na začátku řádku.
- $ - hledat na konci řádku.
- . - Vyhledejte libovolný znak.
Dovolte mi ukázat vám příklad, abyste pochopili, kde a jak tyto speciální znaky používat.
Už víte, že můžeme hledat slova obsahující řetězec "tech" jako níže.
$ grep tech file.txt ostechnix Ostechnix o$technix technology
Ale co kdybyste chtěli jen hledat řádky, které začínají pouze slovem „tech“. Nechcete zobrazit všechna slova obsahující řetězec, ale pouze slova, která mají na začátku řetězec „tech“. Je to také možné. Zde se hodí speciální znaky.
Chcete-li vyhledat slova, která odpovídají vzoru „tech“ na začátku řádku v souboru, spusťte:
$ grep ^tech file.txt technology
Podobně můžeme hledat slova, která končí konkrétním písmenem (písmeny), například "x" , jako níže.
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
Slova, která obsahují jakýkoli znak, můžete také najít pomocí . (tečka).
Například hledejme jakékoli slovo, které má "n" v souboru.
$ grep .n file.txt ostechnix Ostechnix o$technix linux linus unix technology
Nyní byste měli mít základní znalosti o použití grep. Pojďme se naučit další dvě varianty, konkrétně egrep a fgrep .
Příklady příkazů Egrep
egrep znamená e rozšířený grep . Je to podobné jako "grep -E" příkaz. Udělá všechny věci, které udělá grep. Poskytuje však některé další funkce, jako je použití komplikovaného regulárního výrazu, než běžný příkaz grep ihned po vybalení.
Můžeme například hledat jakákoli slova, která začínají buď "l" nebo "o" .
Pamatujte, že k vyhledávání slov na začátku řádku používáme symbol stříšky (^). Náš příkaz pro výše uvedený dotaz tedy bude:
$ egrep '^(l|o)' file.txt ostechnix o$technix linux linus
Vidět? Máme všechna slova, která začínají na „l“ nebo „o“. Vezměte prosím na vědomí, že normální příkaz grep to nedokáže.
Podobně můžeme hledat řádky, které začínají libovolným rozsahem znaků mezi „l“ až „u“. To znamená, že dostaneme řádky, které začínají na l, m, n, o, p, q, r, s, t a u. Vše ostatní bude z výsledku vynecháno.
$ egrep '^[l-u]' file.txt ostechnix o$technix linux linus unix technology
Vezměte prosím na vědomí, že jsem použil hranaté závorky ([) pro vyhledání rozsahu slov. Protože grep rozlišuje velká a malá písmena, nenajde řádky, které začínají velkými písmeny v daném rozsahu.
Pro zobrazení všech řádků, které začínají jak velkými, tak malými písmeny, použijeme:
$ egrep '^[l-u]|[L-U]' file.txt
Nebo,
$ egrep '^([l-u]|[L-U])' file.txt
Ukázkový výstup:
ostechnix Ostechnix o$technix linux linus unix technology HELLO world
Vidět? Nyní máme slova začínající rozsahem znaků "l" až "u" (buď velká nebo malá písmena).
Příklady příkazů Fgrep
fgrep znamená f ast grep . Je to podobné jako "grep -F" . fgrep nedokáže rozpoznat regulární výrazy nebo speciální znaky. fgrep lze použít tam, kde chcete, aby byly vyhodnoceny regulární výrazy.
Například k vyhledání slov končících na "x" použijeme následující příkaz .
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
Nyní spusťte stejný příkaz s fgrep.
$ fgrep x$ file.txt
Nezobrazí nic, protože nemohl vyhodnotit speciální znaky.
Nyní se podívejme na další příklad. Chcete-li vyhledat slova, která odpovídají řetězci "o$" s příkazem grep provedeme:
$ grep o$ file.txt
Ale nedostáváme nic, proč? Protože podle výše uvedeného příkazu používáme k nalezení slov končících na „o“ symbol dolaru ($). Vzhledem k tomu, že v souboru.txt nebyly žádné znaky končící „o“, nedostaneme nic.
Nyní spusťte stejný příkaz s fgrep.
$ fgrep o$ file.txt o$technix
Vidět? Zde používáme příkaz fgrep. Jednoduše ignoruje symbol dolaru (samozřejmě speciální znak) a zobrazí slovo, které obsahuje řetězec "o$".
Další podrobnosti o grep získáte zadáním:
$ grep --help
Poskytne všechny možné možnosti. Nebo se podívejte na manuálové stránky.
$ man grep
Doporučené čtení:
- Naučte se efektivně používat stránky Manuál
Etymologie grep
Grep napsal přes noc Ken Thompson , stejný člověk, který napsal Unix. Ale proč a jak dostal svůj název? Profesor Brian Kernighan vysvětluje etymologii grep v tomto videu.
A to je vše. Grep je jedním z důležitých příkazů, které byste se měli důkladně naučit.
Nyní víte, co je grep a jak jej používat k vyhledávání textových souborů s odpovídajícími vzory v GNU/Linuxu. Také jste se dozvěděli, jak Grep dostal své jméno. Doufám, že to bylo užitečné.