Příkaz egrep patří do rodiny příkazu grep, který se v Linuxu používá pro vyhledávání vzorů. Pokud jste použili příkaz grep, funguje egrep stejně jako grep -E (grep Extended regex‘). Egrep prohledá určitý soubor od řádku k řádku a vypíše řádek (řádky), které obsahují hledaný řetězec/regulární výraz. V tomto článku si vysvětlíme 15 užitečných příkladů příkazů egrep, které pomohou začátečníkům, ale i odborníkům provádět smysluplné vyhledávání v LinuxuTyto příklady jsme provedli na systému Debian 10 Buster, ale lze je snadno zopakovat na většině linuxových distribucí.

Příklad 1: Vyhledání konkrétního řetězce v souboru

Jedná se o nejběžnější použití příkazu egrep. Postupujete tak, že zadáte řetězec, který chcete vyhledat, a název souboru, ve kterém chcete tento řetězec vyhledat. Výsledkem je pak zobrazení celého řádku obsahujícího hledaný řetězec.

Syntaxe:

$ egrep „search_string“ název souboru

Příklad:

$ egrep debian samplefile.txt

V tomto příkladu jsem hledal slovo „debian“ v zadaném textovém souboru. Můžete vidět, jak se ve výsledcích zobrazí celý řádek, který obsahuje slovo „debian“:

Příklad 2: Hledání určitého řetězce ve více souborech

Příkazem egrep můžete hledat řetězec mezi více soubory nacházejícími se ve stejném adresáři. Jen musíte být trochu konkrétnější při zadávání „vzoru“ pro prohledávané soubory. To bude jasnější na příkladu, který uvedeme.

Syntaxe:

$ egrep „search_string“ filename_pattern

Příklad:

Zde budeme hledat slovo „debian“ ve všech .txt souborech zadáním vzoru názvu souboru takto:

$ egrep „debian“ *.txt

Příkaz vypsal všechny řádky spolu s názvy souborů, které obsahují slovo „debian“, ze všech souborů .txt v aktuálním adresáři.

Příklad 3: Rekurzivní hledání řetězce v celém adresáři

Pokud chcete hledat řetězec ve všech souborech z adresáře a jeho podadresářů, můžete tak učinit pomocí příznaku -r v příkazu egrep.

Syntaxe:

$ egrep -r „search_string“ *

Příklad:

V tomto příkladu hledám slovo „sample“ v souborech celého adresáře current(Downloads).

$ egrep -r „sample“ *

Výsledek obsahuje všechny řádky spolu s názvy souborů, které obsahují slovo „sample“ ze všech souborů v adresáři Downloads a jeho podadresářích.

Příklad 4: Provedení vyhledávání bez ohledu na velikost písmen

Pomocí příznaku -i můžete pomocí příkazu egrep vypsat výsledky na základě vyhledávacího řetězce, aniž byste se museli starat o jeho velikost.

Syntaxe:

$ egrep -i „hledaný_řetězec“ název souboru

Příklad:

Tady hledám slovo „debian“ a chci, aby se ve výsledcích zobrazily všechny řádky ze souboru, které obsahují slovo „debian“ nebo „Debian, bez ohledu na jeho velikost.

$ egrep -i „hledaný_řetězec“ název souboru

Vidíte, jak mi příznak -i pomohl při získání všech řádků, které obsahují hledaný řetězec, prostřednictvím vyhledávání „bez ohledu na velikost písmen“.

Příklad 5: Vyhledávání řetězce jako celého slova a ne jako podřetězce

Když normálně vyhledáváte řetězec pomocí egrepu, vypíše všechna slova, která obsahují řetězec jako podřetězec. Například vyhledání řetězce „on“ vypíše všechna slova obsahující řetězec „on“ jako “ on“, „pouze“, „monitor“, „klon“ atd. Pokud chcete, aby se ve výsledcích zobrazilo pouze slovo „on“ jako celé slovo, a ne jako podřetězec, můžete u příkazu egrep použít příznak -w.

Syntaxe:

$ egrep -w „search_string“ název souboru

Příklad:

Tady hledám řetězec „on“ v ukázkovém souboru:

$ egrep -i „on“ ukázkový soubor.txt

Ve výše uvedeném výstupu vidíte, že obsahuje i slovo „pouze“. To však není to, co chci, protože hledám výhradně slovo „on“. Místo toho tedy použiji tento příkaz:

$ egrep -iw „on“ samplefile.txt

Nyní budou výsledky mého hledání obsahovat pouze řádky, které obsahují slovo „on“ jako celé slovo.

Příklad 6: Vypsání pouze názvů souborů, které obsahují řetězec

Někdy chceme načíst pouze názvy souborů, které obsahují určitý řetězec, a ne vypsat řádky, které ho obsahují. To lze provést pomocí příznaku -l (malé písmeno L) v příkazu egrep.

Syntaxe:

$ egrep -l „search_string“ filename_pattern

Příklad:

Tady hledám řetězec „sample“ ve všech souborech .txt v aktuálním adresáři:

$ egrep -l sample *.txt

Výsledek hledání vypíše pouze názvy souborů, které obsahují zadaný řetězec.

Příklad 7: Výpis pouze hledaného řetězce ze souboru

Místo vypisování celého řádku, který obsahuje hledaný řetězec, můžete pomocí příkazu egrep vypsat samotný řetězec. Řetězec se vypíše tolikrát, kolikrát se v zadaném souboru vyskytuje.

Syntaxe:

$ egrep -o „search_string“ jméno souboru

Příklad:

V tomto příkladu hledám v souboru slovo „This“.

$ egrep -o This samplefile_.txt

Poznámka: Toto použití příkazu se hodí, když hledáte řetězec na základě vzoru regulárního výrazu. Regulární výrazy si podrobně vysvětlíme v některém z příštích příkladů.

Příklad 8: Zobrazení n počtu řádků před,za nebo kolem hledaného řetězce

Někdy je velmi důležité znát kontext v souboru, kde je konkrétní řetězec použit. Egrep se hodí v tom smyslu, že pomocí něj lze zobrazit řádek obsahující hledaný řetězec a také určitý počet řádků před, za a kolem něj.

Toto je ukázkový textový soubor, který budu používat pro vysvětlení následujících příkladů:

N počet řádků Za hledaným řetězcem:

Při použití příznaku A následujícím způsobem se zobrazí řádek obsahující hledaný řetězec a N počet řádků za ním:

$ egrep -A <N> „search_string“ název souboru

Příklad:

$ egrep -A 2 „sample“ ukázkový soubor.txt

N počet řádků Před hledaným řetězcem:

Při použití příznaku B následujícím způsobem se zobrazí řádek obsahující hledaný řetězec a N počet řádků před ním:

$ egrep -B <N> „search_string“ název souboru

Příklad:

$ egrep -B 2 „sample“ ukázkový soubor.txt

N počet řádků Před hledaným řetězcem:

Při použití příznaku C následujícím způsobem se zobrazí řádek obsahující hledaný řetězec a N počet řádků před a za ním:

$ egrep -C <N> „search_string“ název souboru

Příklad:

$ egrep -C 2 „sample“ ukázkový soubor.txt

Příklad 9: Shoda regulárních výrazů v souborech

Příkaz egrep se stává výkonnějším, když v souboru hledáte regulární výrazy místo pevných hledaných řetězců.

Syntaxe:

$ egrep „RegularExpressions“ název souboru

Vysvětlíme si, jak můžete použít regulární výrazy při vyhledávání pomocí příkazu egrep:

.

Operátor opakování Použití
? Předchozí položka před ? je nepovinný a porovnává se maximálně jednou
* Předcházející položka před * se porovnává nulakrát nebo vícekrát
+ Předchozí položka před + bude přiřazena jedenkrát nebo vícekrát
{n} Předchozí položka je přesně přiřazena n-krát.
{n,} Předchozí položka je přiřazena n nebo vícekrát
{,m} Předchozí položka je přiřazena maximálně mkrát
{n,m} Předchozí položka je přiřazena nejméně n-krát, ale nejvýše m-krát

Příklad:

V následujícím příkladu se porovnávají řádky obsahující následující výraz:

začínající na „Gnome“ a končící na “ programy“

Příklad 10: Zvýraznění hledaného řetězce

Pokud nastavíte proměnnou prostředí GREP_OPTIONS, jak je uvedeno níže, dostanete výstup se zvýrazněným hledaným řetězcem/vzorem ve výsledcích:

$ sudo export GREP_OPTIONS=‘–color=auto‘ GREP_COLOR=’100;8′

Poté můžete vyhledávat řetězec libovolným způsobem, který jsme popsali v příkladech tohoto článku.

Příklad 11: Provedení inverzního vyhledávání v souboru

Inverzním vyhledáváním rozumíme, že příkaz egrep vypíše vše v souboru kromě řádků, které obsahují hledaný řetězec. K vysvětlení inverzního vyhledávání pomocí příkazu egrep použijeme následující ukázkový soubor. Obsah souboru jsme vypsali pomocí příkazu cat:

Syntaxe:

$ egrep -v „search_string“ jméno souboru

Příklad:

Z uvedeného ukázkového souboru chceme ve výstupu vynechat řádek obsahující slovo „dva“, proto použijeme následující příkaz:

$ egrep -v „dva“ ukázkový soubor_.txt

Vidíte, jak výstup obsahuje vše z ukázkového souboru kromě druhého řádku, který obsahoval hledaný řetězec „dva“.

Příklad 12: Provedení inverzního vyhledávání na základě více kritérií/vzorů hledání

Příkazem -v můžete také přimět příkaz egrep, aby provedl inverzní vyhledávání na základě více než jednoho hledaného řetězce/vzoru.

Pro vysvětlení tohoto scénáře použijeme stejný ukázkový soubor, který jsme uvedli v příkladu 11.

Syntaxe:

$ egrep -v -e „search_string“/“pattern“ -e „search_string“/“pattern“
…. filename

Příklad:

Z uvedeného vzorového souboru chceme ve výstupu vynechat řádek(y) obsahující slova „one“ a „two“, proto použijeme následující příkaz:

$ egrep -v -e „one“ -e „two“ samplefile_.txt

Příkazem -e jsme zadali dvě slova, která chceme vynechat, proto bude výstup vypadat takto:

Příklad 13: Výpis počtu řádků, které odpovídají hledanému řetězci

Místo vypisování hledaného řetězce ze souboru nebo řádků, které ho obsahují, můžete pomocí příkazu egrep spočítat a vypsat počet řádků, které odpovídají hledanému řetězci. Tento počet lze získat pomocí příznaku -c u příkazu egrep.

Syntaxe:

$ egrep -c „hledaný_řetězec“ název souboru

Příklad:

V tomto příkladu použijeme příznak -c pro spočítání počtu řádků, které obsahují slovo „Tento“ v našem ukázkovém souboru:

$ egrep -c „This“ název souboru

Můžete zde také použít funkci inverzního vyhledávání a spočítat a vypsat počet řádků, které neobsahují hledaný řetězec:

$ grep -v -c „hledaný_řetězec“ název souboru

Příklad 14: Zobrazení čísla řádku, na kterém je hledaný řetězec

Pomocí příznaku -n můžete přimět příkaz egrep, aby vypsal hledaný řádek spolu s číslem řádku, který obsahuje hledaný řetězec.

Syntaxe:

$ grep -n „hledaný_řetězec“ název souboru

Příklad:

$ grep -n „Tento“ vzorový_soubor_.txt

Můžete vidět, jak se čísla řádků zobrazují proti výsledkům hledání.

Příklad 15: Zobrazení pozice v souboru, kde hledaný řetězec odpovídá

Pokud chcete znát pozici v souboru, kde hledaný řetězec existuje, můžete použít příznak -b u příkazu egrep.

$ grep -o -b „hledaný_řetězec“ název souboru

Příklad:

$ grep -o -b „Tento“ vzorový_soubor_.txt

Výsledek hledání vypíše offset v bytech souboru, kde hledané slovo existuje. to bylo podrobné použití příkazu egrep. Pomocí kombinace příznaků vysvětlených v tomto článku můžete provádět smysluplnější a složitější vyhledávání v souborech.

Napsat komentář

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