V systémech Linux a Unix je Grep, zkratka pro „global regular expression print“, příkaz používaný při vyhledávání a porovnávání textových souborů obsažených v regulárních výrazech. Kromě toho je příkaz předinstalován v každé distribuci Linuxu. V této příručce se na několika příkladech podíváme na běžné použití příkazu grep.
Příkaz Grep v Linuxu
Příkaz Grep lze použít k nalezení nebo prohledání regulárního výrazu nebo řetězce v textovém souboru. Abychom to demonstrovali, vytvořte textový soubor welcome.txt a přidejte nějaký obsah podle obrázku.
Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.
Skvělý! Nyní jsme připraveni provést několik příkazů grep a manipulovat s výstupem, abychom získali požadované výsledky.
Chcete-li vyhledat řetězec v souboru, spusťte níže uvedený příkaz
Syntaxe
$ grep "string" file name
NEBO
$ filename grep "string"
Příklad :
$ grep "Linux" welcome.txt
Výstup
Jak můžete vidět, grep nejen vyhledal a porovnal řetězec „Linux“, ale také vytiskl řádky, ve kterých se řetězec vyskytuje.
Pokud je soubor umístěn v jiné cestě k souboru, nezapomeňte zadat cestu k souboru, jak je uvedeno níže
$ grep "string" /path/to/file
Kolorování výsledků Grep pomocí volby –color
Pokud pracujete na systému, který nezobrazuje hledaný řetězec nebo vzor v jiné barvě než zbytek textu, použijte --color
aby vaše výsledky vynikly.
Příklad
$ grep --color "free and opensource" welcome.txt
Výstup
Rekurzivní vyhledávání řetězce ve všech adresářích
Pokud chcete hledat řetězec ve vašem aktuálním adresáři a všech ostatních podadresářích, hledejte pomocí - r
příznak, jak je znázorněno
$ grep -r "string-name" *
Například
$ grep -r "linux" *
Výstup
Ignorování rozlišování malých a velkých písmen
Ve výše uvedeném příkladu nám naše výsledky hledání poskytly to, co jsme chtěli, protože řetězec „Linux“ byl zadán velkými písmeny a v souboru také existuje. Nyní zkusme hledat řetězec malými písmeny.
$ grep "linux" file name
Z výstupu nic, že? Je to proto, že grepping nemohl najít a najít a porovnat řetězec „linux“, protože první písmeno je malé. Chcete-li ignorovat rozlišování malých a velkých písmen, použijte -i
flag a spusťte níže uvedený příkaz
$ grep -i "linux" welcome.txt
Výstup
Úžasné, že? The - i
se běžně používá k zobrazení řetězců bez ohledu na jejich rozlišení.
Spočítejte řádky, kde se řetězce shodují, pomocí volby -c
Chcete-li spočítat celkový počet řádků, kde se vyskytuje nebo nachází vzor řetězce, proveďte níže uvedený příkaz
$ grep -c "Linux" welcome.txt
Výstup
Použití Grep k invertování výstupu
Chcete-li invertovat výstup Grep, použijte -v
vlajka. -v
volba dává pokyn grep, aby vytiskl všechny řádky, které neobsahují nebo neodpovídají výrazu.
Volba –v říká grepu, 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. Vraťme se k našemu souboru a zobrazme čísla řádků, jak je uvedeno.
Stiskněte ESC v editoru Vim, zadejte plnou dvojtečku následovanou
set nu
Dále stiskněte Enter
Výstup
Nyní pro zobrazení řádků, které neobsahují řetězec „Linux“, spusťte
$ grep -v "Linux" welcome.txt
Výstup
Jak můžete vidět, grep zobrazil řádky, které neobsahují vyhledávací vzor.
Řádky, které obsahují vyhledávací vzor, očíslujte volbou -n
Chcete-li očíslovat řádky se vzorem řetězce, použijte -n
možnost, jak je znázorněno
$ grep -n "Linux" welcome.txt
Výstup
Vyhledejte přesně odpovídající slovo pomocí volby -w
Předání pak -w
flag vyhledá řádek obsahující přesně odpovídající slovo, jak je uvedeno
$ grep -w "opensource" welcome.txt
Výstup
Pokud se však pokusíte
$ grep -w "open" welcome.txt
ŽÁDNÉ výsledky nebudou vráceny, protože nehledáme vzor, ale přesné slovo!
Použití potrubí s grep
Příkaz grep lze použít společně s rourami pro získání odlišného výstupu.
Pokud například chcete vědět, zda je určitý balíček nainstalován v systému Ubuntu, spusťte
$ dpkg -L | grep "package-name"
Chcete-li například zjistit, zda byl ve vašem systémovém kanálu nainstalován OpenSSH, zadejte dpkg -l
příkaz grep, jak je znázorněno
$ dpkg -L | grep -i "openssh"
Výstup
Zobrazení počtu řádků před nebo za vyhledávacím vzorem pomocí potrubí
Můžete použít -A nebo -B k zobrazení počtu řádků, které předcházejí nebo následují za hledaným řetězcem. -A příznak označuje řádky, které následují za vyhledávacím řetězcem a -B vytiskne výstup, který se objeví před hledaným řetězcem.
Například
$ ifconfig | grep -A 4 ens3
Tento příkaz zobrazí řádek obsahující řetězec plus 4 řádky textu za ens řetězec v ifconfig
příkaz.
Výstup
Naopak v níže uvedeném příkladu použití parametru -B zobrazí řádek obsahující hledaný řetězec plus 3 řádky textu před ether řetězec v ifconfig
příkaz.
Výstup
$ ifconfig | grep -B 4 ether
Použití grep s regulárními výrazy (REGEX)
Výraz REGEX je zkratka pro REG ulární EX tlak. REGEX je posloupnost znaků, která se používá ke shodě se vzorem. Níže je několik příkladů:
^ Matches characters at the beginning of a line
$ Matches characters at the end of a line
"." Matches any character
[a-z] Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets
Příklad
Pro tisk řádků začínajících určitým znakem je syntaxe;
grep ^character file_name
Chcete-li například zobrazit řádky začínající písmenem „d“ v našem souboru welcome.txt, spustili bychom
$ grep ^d welcome.txt
Výstup
Chcete-li zobrazit řádky končící písmenem „x“, spusťte
$ grep x$ welcome.txt
Výstup
Získání nápovědy s dalšími možnostmi Grep
Pokud se potřebujete dozvědět více o použití příkazu Grep, spusťte příkaz níže, abyste získali náhled dalších příznaků nebo možností, které můžete použít společně s příkazem.
$ grep --help
Ukázkový výstup
Vážíme si vašeho času, který jste věnovali tomuto výukovému programu. Neváhejte a vyzkoušejte příkazy a dejte nám vědět, jak to dopadlo.