ú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
Predstavte si, že máte textový súbor nazvaný knihy s nasledujúcimi detskými knihami:
- Robin Hood
- Červená čiapočka
- Peter Pan
- Zlatovláska a tri medvede
- Snehulienka a sedem trpaslíkov
- Pinnochio
- Mačka v klobúku
- Tri malé prasiatka
- Gruffalo
- Charlie a továreň na čokoládu
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é:
- Zlatovláska a tri medvede
- Snehulienka a sedem trpaslíkov
- Mačka v klobúku
- Tri malé prasiatka
- Gruffalo
- Charlie a továreň na čokoládu
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
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
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:
- everydaylinuxuser.com/about.html
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:
- Blackpool
- Liverpool
- mesto Manchester
- mesto Leicester
- Manchester United
- Newcastle United
- FC Spojené Manchester
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:
- aberdeen scotland
- glasgow škótsko
- liverpool england
- colwyn bay
- Londýn, Anglicko
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:
- aberdeen scotland
- inverness scotland
- liverpool england
- colwyn bay wales
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:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
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