Příklad použití příkazu grep Linux

Úvod

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 vám ukážeme řadu příkladů, které vám pomohou pochopit příkaz grep.

01 ze dne 09

Jak vyhledávat řetězec v souboru pomocí GREP

Příkaz Linux grep.

Představte si, že máte textový soubor nazvaný knihy s následujícími dětskými knihami:

Chcete-li najít všechny knihy se slovem "The" v názvu, použijete následující syntaxi:

grep Knihy

Zobrazí se následující výsledky:

V každém případě se zvýrazní slovo "The".

Všimněte si, že vyhledávání je citlivé na velká a malá písmena, takže pokud jeden z titulů měl "the" namí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-case

Můžete také použít přepínač -i následujícím způsobem:

grep -i knihy

02 ze dne 09

Vyhledá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:

aberdeen

aberystwyth

aberlour

inverzní

inverzi

newburgh

nový jeleň

nový galloway

Glasgow

Edinburgh

Chcete-li najít všechna místa s obrácením v názvu, použijte následující syntaxi:

grep inver * místa

Hvězdička (*) zástupný znak znamená 0 ​​nebo mnoho. Proto pokud máte místo nazvané inver nebo místo nazvané inverness pak oba budou vráceny.

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ísta

Na 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

Chcete-li najít všechny stránky about.coms, stačí vyhledávat pomocí následující syntaxe:

grep * about * domain names

Výše uvedený příkaz by spadl, pokud by obsahoval následující název:

Mohli byste proto zkusit následující syntaxi:

grep * domain.com

To by fungovalo v pořádku, pokud neexistovala doména s následujícím názvem:

aboutycom.com

Chcete-li skutečně hledat termín about.com, musíte uniknout bodkou následujícím způsobem:

grep * o názvech domén \ .com

Konečným zástupným znakem, který vám ukáže, je otázka, která znamená nula nebo jeden znak.

Například:

grapple placenames

Výše uvedený příkaz vrátí aberdeen, aberystwyth nebo dokonce berwick.

03 ze dne 09

Hledá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ů:

Pokud jste chtěli najít všechny týmy, které začaly s Manchesterem, použijete následující syntaxi:

grep ^ Manchester týmy

Výš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ýmy

Výše uvedený příkaz vrátí Manchester United a Newcastle United, ale ne FC United Manchester.

04 ze dne 09

Počí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 file

Pokud byl vzor dvakrát porovnán, vrátí se číslo 2.

05 ze dne 09

Hledá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:

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 $ places

Vrá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ísta

To by nalezlo všechna místa, která neskončila zemí.

06 z 09

Jak 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:

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ísta

Bohuž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ísta

Bylo 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ísta

07 ze dne 09

Jak 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 '[AZ]' název souboru

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 '[az]' název souboru

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 09

Hledá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:

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] -" čísla

Jak 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 \} -" čísla

Lomí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.

09 z 09

Použ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 -ef

Zobrazí 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 firefox

souhrn

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šší.