Zatímco grep je dobře známý příkaz Linuxu (již jsme se mu podrobně věnovali), víte, že existují dvě různé varianty tohoto nástroje? Ano, toto jsou egrep a fgrep . V tomto tutoriálu budeme diskutovat o druhém (fgrep) pomocí snadno pochopitelných příkladů. Ale než to uděláme, stojí za zmínku, že všechny příklady a pokyny uvedené v tomto tutoriálu byly testovány na Ubuntu 16.04LTS.
Příkaz Linux fgrep
Pokud se podíváte na oficiální dokumentaci, manuálová stránka pro příkaz grep říká, že fgrep není nic jiného než grep -F. Také říká, že varianty jako fgrep a egrep jsou poskytovány pouze pro zpětnou kompatibilitu. Těchto podrobností se dotkneme později v tomto tutoriálu.
Mezitím je zde syntaxe fgrep (která je stejná jako syntaxe grep):
grep [OPTIONS] PATTERN [FILE...]
A zde je návod, jak manuálová stránka příkazu grep tento nástroj vysvětluje:
grep searches the named input FILEs for lines containing a match to the given PATTERN. If no files
are specified, or if the file “-” is given, grep searches standard input. By default, grep prints
the matching lines.
Následující příklady ve stylu otázek a odpovědí by vám měly poskytnout lepší představu o tom, jak fgrep funguje.
O1. Jak se fgrep liší od grep a egrep?
Příkaz fgrep se liší od příkazů grep i egrep v tom smyslu, že interpretuje PATTERN jako seznam pevných řetězců (místo regulárních výrazů) oddělených novými řádky.
Protože se říká, že je to stejné jako grep -F, zde je návod, jak odborník vysvětlil možnost grep -F na StackExchange:
The-F
switch switches grep into a different mode where it accepts a pattern to match, but then
splits that pattern up into one search string per line and does an OR search on any of the strings
without doing any special pattern matching.
Q2. Jak používat fgrep?
Abychom porozuměli použití fgrep, uveďme si nejprve základní příklad. Předpokládejme, že existuje soubor (file1), který obsahuje následující obsah:
A je tu další soubor (words.txt), který obsahuje seznam slov, která chceme hledat v souboru 1.
Zde je návod, jak můžete použít fgrep k provedení tohoto vyhledávání:
fgrep -f words.txt file1
Můžete tedy vidět, že nalezená slova byla zvýrazněna červeně. Někteří z vás mohou namítnout, že to je to, co by v tomto případě udělaly také grep a egrep, jak se tedy fgrep liší?
Za prvé, ano, máte pravdu. Příkazy grep a egrep by také vytvořily podobný výstup:
Rozdíl však bude zřejmý v případě, že soubor1 a word.txt obsahují následující obsah (pozor na speciální znaky ve slovech):
Zde egrep a grep nenajdou všechna slova:
Ale fgrep bude fungovat tak, jak bylo zamýšleno:
O3. Opravdu neexistuje žádný rozdíl mezi fgrep a grep?
Podle oficiální dokumentace není mezi fgrep a příkazem grep -F žádný rozdíl. Mezi těmito dvěma nástroji je však údajně jeden velký rozdíl:algoritmus porovnávání řetězců, který používají. Zatímco fgrep používá algoritmus Aho-Corasick, grep využívá upravenou verzi Commentz-Walter.
"To znamená, že grep
má nejhorší případ složitosti O(mn), zatímco fgrep
je přinejhorším O(m+n),“ říká expert na fórech StackExchange.
Závěr
Jak je zřejmé, příkaz fgrep není složitý na pochopení a použití. Pokud jde o rozdíl mezi fgrep a grep -F, i když jsme již zaznamenali body ve 3. čtvrtletí, myslíme si, že tento problém by neměl obtěžovat velkou část uživatelů. V případě, že máte pochybnosti nebo máte dotaz týkající se fgrep, podělte se s námi o něj zanecháním komentáře níže.