Príklady použitia príkazu grep Linux

úvod

Príkaz grep grep sa používa ako metóda filtrovania vstupu.

GREP znamená globálnu regulárnu expresnú tlačiareň a preto, aby ste ju efektívne používali, mali by ste mať určité znalosti o regulárnych výrazoch.

V tomto článku vám ukážem niekoľko príkladov, ktoré vám pomôžu pochopiť príkaz grep.

01 z 09

Ako hľadať reťazec v súbore pomocou GREP

Príkaz Linux grep.

Predstavte si, že máte textový súbor nazvaný knihy s nasledujúcimi detskými knihami:

Ak chcete nájsť všetky knihy so slovom "The" v názve, použite nasledujúcu syntax:

grep Knihy

Nasledujúce výsledky budú vrátené:

V každom prípade sa zvýrazní slovo "The".

Všimnite si, že pri vyhľadávaní sa rozlišujú malé a veľké písmená, takže ak jeden z titulov mal "namiesto" "The", potom by nebol vrátený.

Ak chcete ignorovať prípad, môžete pridať nasledujúci prepínač:

grep knihy - case-case

Prepínač -i môžete použiť aj nasledovne:

grep -i knihy

02 z 09

Vyhľadanie reťazca v súbore pomocou zástupných znakov

Príkaz grep je veľmi silný. Na filtrovanie výsledkov môžete použiť množstvo metód porovnávania vzorov.

V tomto príklade vám ukážem, ako vyhľadávať reťazec v súbore pomocou zástupných znakov .

Predstavte si, že máte súbor nazvaný miesta s nasledujúcimi škótskymi miestami:

Aberdeen

Aberystwyth

Aberlour

Inverurie

Inverness

Newburgh

nový jeleň

nový galloway

Glasgow

Edinburgh

Ak chcete nájsť všetky miesta s inverziou v názve, použite nasledujúcu syntax:

grep inver * miesta

Hárok hviezdičkou (*) je 0 alebo veľa. Preto ak máte miesto nazývané inver alebo miesto nazývané inverness, potom sa obe vrátia.

Ďalšou zástupnou značkou, ktorú môžete použiť, je obdobie (.). Môžete použiť toto, aby zodpovedalo jednému písmenu.

grep inver.r miesta

Vyššie uvedený príkaz by našiel miesta nazývané "inverurie" a "inverrné", ale nenašiel by inverenciu, pretože medzi dvoma r, ako je označené jedným obdobím, môže existovať iba jeden zástupný znak.

Doba zástupného znaku je užitočná, ale môže spôsobiť problémy, ak máte ako súčasť textu, ktorý hľadáte.

Pozrite sa napríklad na tento zoznam názvov domén

Ak chcete nájsť všetky stránky about.coms, môžete jednoducho vyhľadávať pomocou nasledujúcej syntaxe:

grep * about * názvy domén

Vyššie uvedený príkaz by padol, ak by obsahoval v ňom nasledujúci názov:

Mohli by ste preto vyskúšať nasledujúcu syntax:

grep * domain.com

To by fungovalo v poriadku, ak neexistovala doména s nasledujúcim názvom:

aboutycom.com

Ak chcete skutočne hľadať termín about.com, musíte uniknúť bodkou takto:

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

Posledná zástupná karta, ktorá vám ukáže, je otáznik, ktorý znamená nula alebo jeden znak.

Napríklad:

grapple placenames

Vyššie uvedený príkaz by vrátil aberdeen, aberystwyth alebo dokonca berwick.

03 z 09

Vyhľadávanie reťazcov na začiatku a konci linky Pomocou grep

Symboly karát (^) a dolár ($) umožňujú vyhľadávať vzory na začiatku a konci riadkov.

Predstavte si, že máte súbor s názvom futbal s nasledujúcimi názvami tímov:

Ak ste chceli nájsť všetky tímy, ktoré začali s Manchesterom, použili by ste nasledujúcu syntax:

grep ^ Manchester tímy

Vyššie uvedený príkaz by sa vrátil Manchester City a Manchester United, ale nie FC United Manchester.

Prípadne môžete nájsť všetky tímy končiace sa United pomocou nasledujúcej syntaxe:

grep United $ tímy

Vyššie uvedený príkaz vráti Manchester United a Newcastle United, ale nie FC United Manchester.

04 z 09

Počítanie počtu zhody pomocou grep

Ak nechcete vrátiť skutočné riadky, ktoré zodpovedajú vzoru pomocou grep, ale chcú vedieť, koľko existuje, môžete použiť nasledujúcu syntax:

grep -c pattern file

Ak bol vzor dvakrát porovnaný, číslo 2 sa vráti.

05 z 09

Hľadanie všetkých výrazov, ktoré sa nezhodujú s použitím grep

Predstavte si, že máte zoznam krajín s nasledujúcimi krajinami:

Možno ste si všimli, že v zátoke Colwyn nie je s ňou spojená žiadna krajina.

Ak chcete vyhľadať všetky miesta v krajine, môžete použiť nasledujúcu syntax:

grep land $ places

Výsledok vráti by boli všetky miesta okrem colwyn bay.

To samozrejme funguje len pre miesta, ktoré končí v krajine (ťažko vedecké).

Môžete invertovať výber pomocou nasledujúcej syntaxe:

grep -v pozemky $ miesta

Toto by našlo všetky miesta, ktoré nekončili pozemkami.

06 z 09

Ako nájsť prázdne riadky v súboroch pomocou grep

Predstavte si, že máte vstupný súbor, ktorý používa aplikácia tretej strany, ktorá zastaví čítanie súboru, keď nájde prázdny riadok takto:

Keď sa aplikácia dostane po línii po lúpehu, zastaví čítanie, čo znamená, že celá chýbajúca zátoka je úplne vynechaná.

Môžete použiť grep na vyhľadávanie prázdnych riadkov s nasledujúcou syntaxou:

grep ^ $ miesta

Bohužiaľ to nie je veľmi užitočné, pretože práve vracia prázdne riadky.

Môžete samozrejme získať počet prázdnych riadkov ako kontrolu, či je súbor platný nasledovne:

grep -c ^ $ miesta

Bolo by však užitočné poznať čísla riadkov, ktoré majú prázdnu čiaru, takže ich môžete nahradiť. Môžete to urobiť pomocou nasledujúceho príkazu:

grep -n ^ $ miesta

07 z 09

Ako hľadať struny veľkých alebo malých znakov pomocou grep

Pomocou grep môžete určiť, ktoré riadky v súbore majú veľké znaky pomocou nasledujúcej syntaxe:

grep '[AZ]'

Hranaté zátvorky [] umožňujú určiť rozsah znakov. Vo vyššie uvedenom príklade zodpovedá akémukoľvek znaku, ktorý je medzi A a Z.

Preto, aby ste sa zhodovali s malými písmenami, môžete použiť nasledujúcu syntax:

grep '[az]'

Ak chcete priradiť iba písmená a nie numerické alebo iné symboly, môžete použiť nasledujúcu syntax:

grep '[a-zA-Z]'

Môžete urobiť to isté s číslami takto:

grep '[0-9]' názov súboru

08 z 09

Hľadáte opakujúce sa vzory Pomocou grep

Môžete použiť kužeľové zátvorky {} na vyhľadanie opakujúceho sa vzoru.

Predstavte si, že máte súbor s telefónnymi číslami:

Viete, že prvá časť čísla musí mať tri číslice a chcete nájsť riadky, ktoré nezodpovedajú tomuto vzoru.

Z predchádzajúceho príkladu viete, že [0-9] vráti všetky čísla v súbore.

V tomto prípade chceme riadky, ktoré začínajú tromi číslami, za ktorými nasleduje pomlčka (-). Môžete to urobiť pomocou nasledujúcej syntaxe:

grep "^ [0-9] [0-9] [0-9] -" čísla

Ako vieme z predchádzajúcich príkladov, karát (^) znamená, že riadok musí začínať nasledujúcim vzorom.

[0-9] bude vyhľadávať ľubovoľné číslo medzi 0 a 9. Keď je toto zahrnuté trikrát, zodpovedá 3 číslam. Nakoniec existuje pomlčka, ktorá označuje, že pomlčka musí nasledovať po troch číslach.

Použitím kužeľových zátvoriek môžete vyhľadávanie meniť nasledovne:

grep "^ [0-9] \ {3 \} -" čísla

Lomka unikne {zátvorke tak, že funguje ako súčasť regulárneho výrazu, ale v podstate to, čo hovorí, je [0-9] {3}, čo znamená akékoľvek číslo medzi 0 a 9 trikrát.

Kliešte môžu byť použité aj nasledovne:

{5,10}

{5}

{5,10} znamená, že vyhľadávaný znak sa musí opakovať najmenej päťkrát, ale nie viac ako 10, zatiaľ čo {5,} znamená, že znak sa musí opakovať najmenej päťkrát, ale môže to byť viac ako to.

09 z 09

Použitie výstupu z iných príkazov pomocou grep

Zatiaľ sme sa pozreli na zhodu vzoru v rámci jednotlivých súborov, ale grep môže použiť výstup z iných príkazov ako vstup pre prispôsobenie vzorov.

Skvelým príkladom toho je príkaz ps, ktorý uvádza zoznam aktívnych procesov.

Napríklad spustite nasledujúci príkaz:

ps -ef

Zobrazia sa všetky spustené procesy vo vašom systéme.

Môžete použiť grep na vyhľadanie konkrétneho spúšťacieho procesu nasledovne:

ps -ef | grep firefox

zhrnutie

Príkaz grep je základný príkaz linuxu a je to jeden, ktorý stojí za to sa učiť, pretože to uľahčí život pri vyhľadávaní súborov a procesov pri používaní terminálu.