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!