Vyhledávání na webu

Jak používat příkaz Grep v Linuxu [12 užitečných příkladů]


Už jste někdy byli konfrontováni s úkolem hledat konkrétní řetězec nebo vzor v souboru, ale nemáte ponětí, kde začít? Tak, tady je příkaz grep na záchranu!

grep je výkonný nástroj pro vyhledávání vzorů souborů, který je vybaven každou distribucí Linuxu. Pokud z jakéhokoli důvodu není na vašem systému nainstalován, můžete jej snadno nainstalovat prostřednictvím správce balíčků, jak je znázorněno na obrázku.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

Zjistil jsem, že nejsnazší způsob, jak si namočit nohy pomocí příkazu grep, je ponořit se přímo dovnitř a použít příklady z reálného světa.

1. Hledejte a najděte soubory v Linuxu

Řekněme, že jste na svůj počítač právě nainstalovali novou kopii nového Ubuntu a že se chystáte vyzkoušet skriptování v Pythonu.

Procházeli jste web a hledali výukové programy, ale vidíte, že se používají dvě různé verze Pythonu a nevíte, která verze Pythonu je na Ubuntu nainstalována instalačním programem, popř. jestli nainstaloval nějaké moduly.

Jednoduše spusťte následující příkaz dpkg pomocí grep, jak je znázorněno:

dpkg -l | grep -i python

Nejprve jsme spustili dpkg –l, který uvádí nainstalované balíčky *.deb ve vašem systému. Za druhé jsme tento výstup poslali do grep -i python, který jednoduše říká „přejděte na grep a odfiltrujte a vraťte vše, co obsahuje „python“. “

Možnost -i slouží k ignorování velkých a malých písmen, protože grep rozlišuje malá a velká písmena. Používání volby -i je dobrým zvykem, jak se do toho dostat, pokud se samozřejmě nesnažíte najít konkrétnější hledání.

2. Vyhledávání a filtrování souborů v Linuxu

grep lze také použít k vyhledávání a filtrování v rámci jednotlivých souborů nebo více souborů. Vezměme si tento scénář:

Máte nějaké potíže se svým webovým serverem Apache a obrátili jste se na jedno z mnoha skvělých fór na internetu s žádostí o pomoc.

Laskavá duše, která vám odpoví, vás požádala, abyste zveřejnili obsah svého souboru /etc/apache2/apache2.conf. Nebylo by pro vás, pro toho, kdo vám pomáhá, i pro všechny, kdo to čtou, jednodušší, kdybyste mohli odstranit všechny komentované řádky? No, můžeš! Stačí spustit toto:

grep -v ^\# /etc/apache2/apache2.conf | grep .

Volba -v říká grep, aby invertoval svůj výstup, což znamená, že místo tisku odpovídajících řádků udělejte opak a vytiskněte všechny řádky, které neodpovídají výrazu, v tomto případě # řádky s komentářem.

Všimněte si, že jsme také použili grep . na konci, abychom skryli výstup všech prázdných řádků. Tímto způsobem vidíme pouze nastavení konfigurace v našem terminálu.

3. Najděte všechny soubory .mp3 v Linuxu

grep může být velmi užitečný pro filtrování z stdout. Řekněme například, že máte celou složku plnou hudebních souborů v mnoha různých formátech.

Chcete najít všechny soubory *.mp3 od interpreta JayZ, ale nechcete žádnou z remixovaných skladeb. Pomocí příkazu najít s několika rourami grep bude stačit:

find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

V tomto příkladu používáme najít k vytištění všech souborů s příponou *.mp3 a pro filtrování je přesuneme do grep –i vytisknout a vytisknout všechny soubory s názvem „JayZ “ a pak další roura na grep –vi, která odfiltruje a nevytiskne všechny názvy souborů s řetězcem (v žádném případě) „remix“.

4. Zobrazte počet řádků před nebo za vyhledávacím řetězcem

Další pár možností jsou přepínače -A a -B, které zobrazí odpovídající řádek a počet řádků, které jsou buď před nebo za vyhledávacím řetězcem.

Zatímco manuálová stránka poskytuje podrobnější vysvětlení, nejsnáze si zapamatuji možnosti jako -A=po a -B=před:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. Vytiskne počet řádků kolem shody

Volba -C grepu je podobná, ale místo toho, aby se vytiskly řádky, které jsou před nebo za řetězcem, vytiskne řádky v obou směrech:

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Spočítejte počet zápasů

Podobně jako převod řetězce grep do počtu slov (příkaz wc), vestavěná možnost grep může provést totéž:

ifconfig | grep -c inet6

7. Prohledávejte soubory podle daného řetězce v Linuxu

Volba –n pro grep je velmi užitečná při ladění souborů během chyb kompilace. Zobrazí číslo řádku v souboru daného vyhledávacího řetězce:

grep -n "main" setup.py

8. Rekurzivně vyhledejte řetězec ve všech adresářích

Pokud byste chtěli hledat řetězec v aktuálním adresáři spolu se všemi podadresáři, můžete zadat volbu –r pro rekurzivní vyhledávání:

grep -r “function” *

9. Vyhledejte celý vzor

Předáním možnosti -w grep vyhledá celý vzor, který je v řetězci. Například pomocí:

ifconfig | grep -w "RUNNING"

Vytiskne řádek obsahující vzor v uvozovkách. Na druhou stranu, pokud zkusíte:

ifconfig | grep -w "RUN"

Nic se nevrátí, protože nehledáme vzor, ale celé slovo.

10. Vyhledejte řetězec v souborech Gzipped

Jistou zmínku si zaslouží deriváty grepu. První je zgrep, který je podobně jako zcat určen k použití na soubory gzip. Má stejné možnosti jako grep a používá se stejným způsobem:

zgrep -i error /var/log/syslog.2.gz

11. Porovnejte regulární výrazy v souborech

Příkaz egrep je další odvozenina, která znamená „Extended Global Regular Expression“. Rozpoznává další metaznaky výrazu, jako je at + ? | a ().

Příkaz egrep je velmi užitečný pro vyhledávání zdrojových souborů a dalších částí kódu, pokud to bude potřeba. Lze jej vyvolat z běžného grep zadáním volby -E.

grep -E

12. Vyhledejte řetězec s pevným vzorem

Příkaz fgrep vyhledává v souboru nebo seznamu souborů pevný řetězec vzoru. Je to stejné jako grep -F. Běžným způsobem použití fgrep je předat mu soubor vzorů:

fgrep –f file_full_of_patterns.txt file_to_search.txt

Toto je pouze výchozí bod pro grep, ale jak pravděpodobně vidíte, je neocenitelný pro různé účely. Kromě jednoduchých jednořádkových příkazů, které jsme implementovali, lze grep použít k psaní výkonných úloh cron a robustních shell skriptů. Start.

Buďte kreativní, experimentujte s možnostmi na manové stránce a vymýšlejte výrazy grep, které slouží vašim vlastním účelům!