Jednou z nejčastěji používaných operací v linuxovém terminálu je prohledávání textových souborů a filtrování standardních výstupních nebo chybových proudů. Linux poskytuje skvělý nástroj, který nám umožňuje tento úkol snadno vyřešit – grep. V tomto článku pokryjeme nejběžnější případy použití pro grep, které vám rozhodně zjednoduší každodenní rutinu.
Co je grep
Grep je zkratka pro Global Regular Expression Print. Jedná se o velmi užitečný nástroj, pokud jde o prohledávání velké sady textových souborů (například protokolů).
Grep je nejužitečnější příkaz na Linuxu/Unixu pro systémové administrátory, vývojáře a inženýry DevOps. Hlavním účelem tohoto nástroje je zkontrolovat řetězec nebo vzory v určeném souboru nebo filtrovat výstup jiných příkazů.
Tento vzor, který jsme zmínili výše, je známý jako regulární výraz.
Příkaz grep vypíše do terminálu řádek s řetězcem, pokud najde shodu s vyhledávacím dotazem.
Existuje mnoho různých příkladů použití grep, takže se pojďme podívat, jak a kdy jej můžete použít.
Instalace grep v systému Linux
Obvykle je grep nainstalován ve většině systémů Linux a dokonce i v malých kontejnerech Docker. Pokud jej však nemáte nainstalovaný v systému, můžete to provést například pomocí následujícího příkazu:
apt-get updateapt-get install -y grep
příklady použití grepu
V této části článku pokryjeme nejběžnější příklady použití grep.
Filtrování výstupu příkazu
Příkaz grep můžete použít k vyhledání a tisku libovolného řádku z libovolného výstupu příkazu Linuxu, který odpovídá zadanému vzoru.
V tomto příkladu zkontrolujeme, které balíčky Pythonu 3 máme v našem systému Ubuntu:
dpkg -l | grep python3
V tomto příkladu:
dpkg -l
vytiskne všechny nainstalované balíčkygrep
bude filtrovatdpkg
výstup a tisk pouze řetězce, které obsahujípython3
řetězec
Stejným způsobem můžete zobrazit informace o modelu CPU, například:
grep -i 'Model' /proc/cpuinfo
Hledání řetězce v souboru
V tomto příkladu příkaz grep vyhledá řetězec „root“ v souboru ‚/etc/passwd‘ a vytiskne jej, pokud byl řetězec nalezen.
Obvykle tento příkaz používáme ke kontrole, zda má systém uživatelský účet se zadaným jménem (příklad root in out):
grep root /etc/passwd
Prohledávat více souborů
Chcete-li zjistit řetězec ve více souborech najednou, použijte příkaz grep a zadejte názvy souborů do jednoho řádku. K prohledávání souborů podle masky můžete použít regulární výrazy.
Pojďme si stáhnout veřejně přístupný Apache access.log:
mkdir -p /var/log/httpd
cd /var/log/httpd
wget http://www.almhuette-raith.at/apache-log/access.log
Nyní rozdělme tento soubor na více souborů po 10 000 řádcích v souboru:
Nyní můžeme v souborech vyhledat chybu serveru HTTP 500:
grep ' 500 ' xac xad
Chcete-li hledat ve všech souborech v aktuálním pracovním adresáři, použijte *
po vzoru.
V níže uvedeném příkladu příkaz grep vyhledá 500 chyb serveru ve všech souborech:
grep ' 500 ' *
Vyhledávání celých slov
Pomocí -w
možnost v příkazu grep, můžete vyhledat soubory obsahující vzor slova:
grep -w 'Windows XP' *
Vyhledávání bez rozlišení malých a velkých písmen
Příkaz grep je dostatečně chytrý, aby nám umožnil provádět vyhledávání bez ohledu na velikost písmen ve vyhledávacím vzoru.
K tomu potřebujeme použít -i
jako argument.
Zde je stejný příklad, ale nyní provádíme filtrování bez rozlišení velkých a malých písmen:
grep -i -w 'windows xp' *
Výstupní soubory obsahující vyhledávací vzor
Můžete použít -l
možnost zobrazení všech názvů souborů obsahujících hledaný vzor:
grep -l -i -w 'windows xp' *
Počet shod na soubor
Pokud chcete vědět, kolikrát se váš vzor shodoval ve všech souborech, přidejte -c
možnost:
grep -c -i -w 'windows xp' *
Počet řádků před hledaným vzorem
Chcete-li zobrazit řádky v souboru před vyhledávacím vzorem, přidejte -B
argument následovaný počtem čísel, která chcete načíst ze souboru:
grep -B 3 -i -w 'windows xp' xaf
Počet řádků za hledaným vzorem
Podobně můžete použít -A
argument k určení počtu řádků, které se mají vytisknout po hledaném vzoru:
grep -A 3 -i -w 'windows xp' xaf
Vytisknout číslo řádku pro shodu vzoru vyhledávání
Chcete-li zobrazit číslo řádku nalezeného hledaného vzoru, můžete použít -n
argument:
grep -n -i -w 'windows xp' xaf
Přiřazení začátku řetězce
V následujícím příkladu použijeme příkaz grep k nalezení všech požadavků pocházejících z konkrétní IP adresy.
Všechny prohledávané řádky by měly začínat od 5.34.180.192
termín.
grep "^5.34.180.192" xaf
Přiřazení konce řetězce
Přidejte $
na konec vzoru, abyste našli řádky končící hledaným řetězcem:
grep "Chrome/62\" \"-\"$" xaf
Jakmile náš vyhledávací řetězec obsahuje "
symboly, unikneme jim pomocí \
.
Vyhledávání podle více vzorů
Můžeme použít grep k hledání více vzorů najednou. Přidejte -e
argument před každým vyhledávacím vzorem:
grep -e "Chrome/62\" \"-\"$" -e "15/Mar/2021:08:35:23" xaf
Zde prohledáváme všechny řetězce v souboru, které končí na Chrome/62" "-"
A obsahovat konkrétní datum a čas 15/Mar/2021:08:35:23
.
Změna výstupní barvy
Protože barevný výstup zvyšuje čitelnost, můžete jej změnit na svou oblíbenou barvu nastavením GREP_COLOR
proměnná prostředí:
GREP_COLOR='1;35' grep --color=always 'admin' /etc/passwd
Více informací o proměnné GREP_COLOR můžete získat v oficiální dokumentaci grep.
Shrnutí
Příkaz grep je mimořádně užitečný, pokud jde o filtrování obsahu textových souborů nebo výsledků výstupu příkazů. V tomto článku jsme se zabývali nejběžněji používanými příkazy grep, které zefektivní prostředí vašeho prostředí.
Doufáme, že tento článek byl pro vás užitečný. Pokud ano, pomozte nám to rozšířit do světa.