Úvod
Grep je výkonný nástroj dostupný ve výchozím nastavení na systémech založených na UNIXu. Název je zkratkou pro Global Regular Expression Print.
Pomocí grep
můžete upravit, jak nástroj v tomto případě vyhledává vzor nebo více vzorů. Můžete grepovat více řetězců v různých souborech a adresářích. Nástroj vytiskne všechny řádky, které obsahují slova, která zadáte jako vzor vyhledávání.
V této příručce vám ukážeme, jak používat grep k vyhledávání více slov nebo vzorců řetězců . Postupujte podle příkladů v tomto tutoriálu a naučte se, jak využít grep nejúčinněji.
Předpoklady
- Linux nebo systém podobný UNIXu
- Přístup k terminálu nebo příkazovému řádku
- Uživatel s oprávněním pro přístup k nezbytným souborům a adresářům
Jak grepovat více vzorů – syntaxe
Základní syntaxe grep při hledání více vzorů v souboru zahrnuje použití grep
příkaz následovaný řetězci a názvem souboru nebo jeho cestou.
Vzory musí být uzavřeny do jednoduchých uvozovek a odděleny svislou čarou. Před svislou čarou použijte zpětné lomítko | pro regulární výrazy.
grep 'pattern1\|pattern2' fileName_or_filePath
Nejnovější způsob použití grep je s -E
volba. Tato možnost považuje vzor, který jste použili, za rozšířený regulární výraz .
grep -E 'pattern1|pattern2' fileName_or_filePath
Zastaralá verze extended grep je egrep .
egrep 'pattern1|pattern2' fileName_or_filePath
Další možností je přidat do grep
více samostatných vzorů příkaz.
Chcete-li to provést, použijte -e
příznak a pokračujte v přidávání požadovaného počtu vyhledávacích vzorů:
grep -e pattern1 -e pattern2 fileName_or_filePath
Jaký je rozdíl mezi grep, grep -E a egrep?
egrep
příkaz je zastaralá verze rozšířeného grep. Má stejnou funkci jako grep -E
.
Rozdíl mezi grep a rozšířeným grep je ten, že rozšířený grep obsahuje meta znaky, které byly přidány později.
Tyto znaky jsou závorky () , složené závorky {} a otazník . Svislý znak | je také považován za meta znak v rozšířeném grep.
Příklady použití programu Grep pro více řetězců, vzorů a slov
Abyste se ujistili, že rozumíte tomu, jak používat grep k prohledávání více řetězců, doporučujeme vytvořit soubor s nějakým textem, na kterém vyzkoušíme několik různých případů použití.
V našem případě jsme soubor pojmenovali sample.txt a přidal několik odstavců textu. Soubor jsme uložili do adresáře test uživatele, tedy v /home/test/sample.txt
Jak grepovat více vzorů v souboru
V níže uvedených příkladech použijeme grep místo rozšířeného grep. Nezapomeňte použít zpětné lomítko před svislou čarou .
Vzhledem k tomu, že grep nepodporuje symbol svislé čáry jako operátor alternace, musíte použít znak escape (zpětné lomítko \), abyste to řekli grep
příkaz k jinému zacházení s potrubím.
Chcete-li například vyhledat slova extra a hodnota v sample.txt soubor použijte tento příkaz:
grep 'extra\|value' sample.txt
Výstup zvýrazní řetězec, který jste chtěli grep.
Pokud je stejný soubor v jiném adresáři , musíte přejít do tohoto adresáře nebo použít úplnou cestu k souboru:
grep 'extra\|value' /home/test/Desktop/sample.txt
Vyhledávání více než dvou slov , přidávejte je stejným způsobem.
Chcete-li například vyhledat tři slova, přidejte požadovaný řetězec znaků následovaný zpětným lomítkem a svislou čarou:
grep 'extra\|value\|service' sample.txt
Podívejme se, jak výše uvedený příkaz grep vypadá při použití grep -E
, egrep
a grep -e
:
grep -E ‘extra|value|service’ sample.txt
egrep ‘extra|value|service’ sample.txt
grep -e extra -e value -e service sample.txt
Použijeme grep
v dalších příkladech, ale můžete použít libovolnou syntaxi, kterou preferujete.
Vyhledání více přesných shod v souboru
Pokud chcete najít přesné shody pro více vzorů, předejte -w
příznak do grep
příkaz.
grep -w 'provide\|count' sample.txt
Například níže uvedený výstup ukazuje rozdíl mezi vyhledáváním bez -w
as ním:
Jak vidíte, výsledky jsou různé. První příkaz zobrazí všechny řádky s řetězci, které jste použili.
Druhý příkaz ukazuje, jak grepovat přesné shody pro více řetězců. Výstup vytiskne pouze řádky, které obsahují přesná slova.
Při použití funkce Grep pro více řetězců ignorujte velká a malá písmena
Abyste při hledání více vzorů něco nepřehlédli, použijte -i
příznak ignorovat velká a malá písmena.
Například u tohoto příkazu budeme ignorovat malá a velká písmena:
grep -i 'phoenix\|linux' sample.txt
Výstup ukazuje, jak se tyto dva příkazy liší. Pokud zahrnete -i
označit a ignorovat malá a velká písmena, výsledek pro více shod zahrnuje všechny shody.
Tímto způsobem získáte další výsledky. Pokud přidáte také -w
flag na tento příkaz, můžete výsledky ještě více zúžit:
Zobrazit počet více shod v souboru
Řekněme, že sledujete soubor protokolu a chcete zjistit, zda se zvyšuje počet varování nebo zpráv. Nechcete vidět podrobné výsledky, když se vrátí velký počet shod.
Chcete-li například zobrazit počet více shod v bootstrap.log soubor, zadejte:
grep -c 'warning\|error' /var/log/bootstrap.log
Výstup vytiskne počet shod. Tímto způsobem můžete rychle zjistit, zda se zvýšil počet varování a chyb.
Grep pro více vzorů v konkrétním typu souboru
Pomocí grep můžete prohledávat více řetězců pouze v určitém typu souboru. Pokud chcete monitorovat soubory protokolu v jednom adresáři nebo pokud chcete prohledávat všechny textové soubory, použijte místo názvu souboru hvězdičku a příponu souboru.
Chcete-li například vyhledat varování a chyby ve všech .log soubory v /var/log/ adresář, zadejte:
grep 'warning\|error' /var/log/*.log
Abychom lépe ukázali, jak tato možnost funguje, ukážeme pouze počet shod.
Výstup zobrazuje všechny soubory, ve kterých grep prohledával řetězce, které jste použili.
Rekurzivně vyhledávat více vzorů v souboru
grep
příkaz hledá pouze v aktuálním adresáři, když použijete zástupný znak hvězdička.
Chcete-li při hledání více vzorů zahrnout všechny podadresáře, přidejte -R
operátor na grep:
grep -R 'warning\|error' /var/log/*.log
Výstup vrátí výsledky ze všech souborů grep
příkaz nalezený v /var/log/ adresář a jeho podadresáře.