Příkaz Linux grep se používá jako metoda pro filtrování vstupu. GREP znamená globální regulární výrazovou tiskárnu, a proto je nutné, abyste ji efektivně využili, měli byste mít nějaké znalosti o regulárních výrazech.
V tomto článku se dozvíte řadu příkladů, které vám pomohou pochopit příkaz grep.
01 ze dne 09Jak vyhledávat řetězec v souboru pomocí GREP

Představte si, že máte textový soubor nazvaný knihy s následujícími dětskými knihami:
- Robin Hood
- Červená Karkulka
- Peter Pan
- Zlatovláska a tři medvědi
- Sněhurka a sedm trpaslíků
- Pinnochio
- Kočka v klobouku
- Tři malé prasátka
- Gruffalo
- Karlík a továrna na čokoládu
Chcete-li najít všechny knihy se slovem "The" v názvu, použijete následující syntaxi:
grep KnihyZobrazí se následující výsledky:
- Zlatovláska a tři medvědi
- Sněhurka a sedm trpaslíků
- Kočka v klobouku
- Tři malé prasátka
- Gruffalo
- Karlík a továrna na čokoládu
V každém případě se zvýrazní slovo "The".
Vyhledávání je citlivé na velká a malá písmena, takže pokud jeden z titulů měl "místo" "The", pak by nebyl vrácen.
Chcete-li případ ignorovat, můžete přidat následující přepínač:
Grep knihy - case-caseMůžete také použít přepínač -i následujícím způsobem:
Pokračujte ve čtení níže
02 ze dne 09Vyhledání řetězce v souboru pomocí zástupných znaků
Příkaz grep je velmi silný. Pro filtrování výsledků můžete použít množství technik pro porovnávání vzorků.
V tomto příkladu vám ukážeme, jak hledat řetězec v souboru pomocí zástupných znaků.
Představte si, že máte soubor nazvaný místa s následujícími skotskými názvy míst:
aberdeenaberystwythaberlourinverzníinverzinewburghnový jeleňnový gallowayGlasgowEdinburghChcete-li najít všechna místa s obrácením v názvu, použijte následující syntaxi:
grep inver * místaHvězdička (*) zástupný znak znamená 0 nebo mnoho. Proto pokud máte místo nazvané inver nebo místo nazvané Inverness, pak by se oba vrátili.
Dalším zástupným znakem, který můžete použít, je období (.). Můžete to použít pro jedno písmeno.
grep inver.r místaNa výše uvedeném příkazu by se nacházely místa nazývaná "inverurie" a "inverse", ale nenašli by se neúmyslně, protože mezi oběma dvěma písmeny r může být pouze jedna zástupná značka.
Doba zástupného znaku je užitečná, ale může způsobit problémy, pokud ji máte jako součást textu, který hledáte.
Podívejte se například na tento seznam názvů domén
- linux.about.com
- kusupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxusus.com
- google.co.uk
- google.au
- direct.gov.uk
Chcete-li najít všechny .coms, které byste mohli hledat pouze pomocí následující syntaxe:
grep * about * domain namesVýše uvedený příkaz by spadl, pokud by obsahoval následující název:
- everydaylinuxuser.com/about.html
Mohli byste proto zkusit následující syntaxi:
grep * domain.comTo by fungovalo v pořádku, pokud neexistovala doména s následujícím názvem:
aboutycom.comChcete-li skutečně hledat termín about.com, musíte uniknout bodkou následujícím způsobem:
grep * o názvech domén .comKonečným zástupným znakem, který vám ukáže, je otázka, která znamená nula nebo jeden znak.
Například:
grapple placenamesVýše uvedený příkaz vrátí aberdeen, aberystwyth nebo dokonce berwick.
Pokračujte ve čtení níže
03 ze dne 09Hledání řetězců na začátku a konci řádku Použití grep
Symboly carat (^) a dolaru ($) umožňují vyhledávat vzory na začátku a na konci řádků.
Představte si, že máte soubor s názvem fotbal s následujícími názvy týmů:
- Blackpool
- Liverpool
- město Manchester
- Leicester City
- Manchester United
- Newcastle United
- FC Spojené Manchester
Pokud jste chtěli najít všechny týmy, které začaly s Manchesterem, použijete následující syntaxi:
grep ^ Manchester týmyVýše uvedený příkaz by se vrátil Manchester City a Manchester United, ale ne FC United Manchester.
Případně můžete najít všechny týmy, které končí s United, pomocí následující syntaxe:
grep United $ týmyVýše uvedený příkaz se vrátí do Manchesteru United a Newcastle United, ale ne FC United Manchester.
04 ze dne 09Počítání počtu shody pomocí grep
Pokud nechcete vrátit skutečné řádky, které odpovídají vzoru pomocí grep, ale chcete vědět, kolik existuje, můžete použít následující syntaxi:
grep -c pattern input filePokud byl vzor dvakrát porovnán, vrátí se číslo 2.
Pokračujte ve čtení níže
05 ze dne 09Hledání všech výrazů, které neodpovídají použití grep
Představte si, že máte seznam míst s následujícími zeměmi:
- aberdeen skotsko
- glasgow skotsko
- liverpool Anglie
- colwyn bay
- Londýn, Anglie
Možná jste si všimli, že v zátoce Colwyn není s ní přidružena žádná země.
Chcete-li vyhledat všechna místa se zemí, můžete použít následující syntaxi:
grep land $ placesVrátí se výsledky všech míst s výjimkou zálivu Colwyn.
To samozřejmě funguje pouze pro místa, která končí v zemi (sotva vědecká).
Výběr můžete invertovat pomocí následující syntaxe:
grep -v země $ místaTo by nalezlo všechna místa, která neskončila zemí.
06 z 09Jak najít prázdné čáry v souborech pomocí grep
Představte si, že máte vstupní soubor, který používá aplikace třetí strany, která přestane číst soubor, když najde prázdný řádek takto:
- aberdeen scotland
- inverzní skotsko
- liverpool anglie
- colwyn bay wales
Když se aplikace dostane po linii po liverpoolu, přestane číst, což znamená, že Colwyn Bay je zcela chybí.
Pomocí příkazu grep můžete hledat prázdné řádky s následující syntaxí:
grep ^ $ místaBohužel to není zvláště užitečné, protože právě vrací prázdné řádky.
Samozřejmě můžete získat počet prázdných řádků jako kontrolu, zda je soubor platný následovně:
grep -c ^ $ místaBylo by však mnohem užitečnější znát čísla řádků, které mají prázdný řádek, abyste je mohli nahradit. Můžete to provést následujícím příkazem:
grep -n ^ $ místaPokračujte ve čtení níže
07 ze dne 09Jak vyhledávat řetězce velkých nebo malých znaků pomocí grep
Pomocí příkazu grep můžete určit, které řádky v souboru mají velká písmena pomocí následující syntaxe:
grep 'A-Z'Hranaté závorky umožňují určit rozsah znaků. Ve výše uvedeném příkladu odpovídá libovolnému znaku, který je mezi A a Z.
Chcete-li tedy přiřadit malá písmena, můžete použít následující syntaxi:
grep 'a-z'Pokud chcete odpovídat pouze písmenům, nikoli číslicím nebo jiným symbolům, můžete použít následující syntaxi:
grep 'a-zA-Z'Stejně můžete provést následující čísla:
grep '0-9' název souboru 08 z 09Hledání opakujících se vzorků pomocí grep
Můžete použít zkroucené závorky {} pro vyhledání opakujícího se vzoru.
Představte si, že máte soubor s telefonními čísly následujícím způsobem:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Víte, že první část čísla musí být tři číslice a chcete najít řádky, které neodpovídají tomuto vzoru.
Z předchozího příkladu víte, že 0-9 vrací všechna čísla v souboru.
V tomto případě chceme řádky, které začínají třemi číslicemi, za kterými následuje pomlčka (-). Můžete to udělat pomocí následující syntaxe:
grep "^ 0-9 0-9 0-9 -" číslaJak víme z předchozích příkladů, karát (^) znamená, že čára musí začínat následujícím vzorem.
0-9 vyhledá libovolné číslo v rozmezí 0 až 9. Protože je toto zahrnuto třikrát, odpovídá 3 číslům. Konečně je pomlčka, která označuje, že pomlčka musí mít tři čísla.
Použitím zkroucených závorek můžete provést vyhledávání menší:
grep "^ 0-9 {3 } -" číslaLomítko uniká {bracket tak, že funguje jako součást regulárního výrazu, ale v podstatě to, co říká, je 0-9 {3}, což znamená, že libovolné číslo mezi 0 a 9 třikrát.
Konzolové konzoly lze použít také takto:
{5,10}{5,}{5,10} znamená, že hledaný znak musí být opakován nejméně pětkrát, ale ne více než 10, zatímco {5,} znamená, že znak musí být opakován alespoň pětkrát, ale může to být více než to.
Pokračujte ve čtení níže
09 z 09Použití výstupu z jiných příkazů Použití příkazu grep
Zatím jsme se podívali na přizpůsobení vzoru v rámci jednotlivých souborů, ale grep může použít výstup z ostatních příkazů jako vstup pro přizpůsobení vzoru.
Velkým příkladem toho je použití příkazu ps, který uvádí aktivní procesy.
Například spusťte následující příkaz:
ps -efZobrazí se všechny spuštěné procesy ve vašem systému.
Pomocí příkazu grep můžete vyhledávat konkrétní spuštěný proces následujícím způsobem:
ps -ef | grep firefoxsouhrn
Příkaz grep je základním příkazem Linuxu a je to, co stojí za to se učit, protože při hledání terminálů bude váš život mnohem jednodušší.




