Príkaz grep grep sa používa ako metóda na filtrovanie 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 sa dozviete niekoľko príkladov, ktoré vám pomôžu pochopiť príkaz grep.
01 z 09Ako 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 KnihyNasledujú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".
Vyhľadávanie je citlivé na veľké a malé písmená, takže ak jeden z titulov mal "miesto" namiesto "The", potom by nebol vrátený.
Ak chcete ignorovať prípad, môžete pridať nasledujúci prepínač:
grep knihy - case-casePrepínač -i môžete použiť aj nasledovne:
Pokračujte v čítaní nižšie
02 z 09Vyhľ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:
AberdeenAberystwythAberlourInverurieInvernessNewburghnový jeleňnový gallowayGlasgowEdinburghAk chcete nájsť všetky miesta s inverziou v názve, použite nasledujúcu syntax:
grep inver * miestaHárok hviezdičkou (*) je 0 alebo veľa. Preto ak máte miesto nazývané inver alebo miesto nazývané Inverness, obaja by sa vrátili.
Ď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 miestaVyšš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 .com, môžete jednoducho vyhľadávať pomocou nasledujúcej syntaxe:
grep * about * názvy doménVyšš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.comTo by fungovalo v poriadku, ak neexistovala doména s nasledujúcim názvom:
aboutycom.comAk chcete skutočne hľadať termín about.com, musíte uniknúť bodkou takto:
grep * o názvoch domén .comPosledná zástupná karta, ktorá vám ukáže, je otáznik, ktorý znamená nula alebo jeden znak.
Napríklad:
grapple placenamesVyššie uvedený príkaz by vrátil aberdeen, aberystwyth alebo dokonca berwick.
Pokračujte v čítaní nižšie
03 z 09Vyhľ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ímyVyšš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, ktoré končí s United, pomocou nasledujúcej syntaxe:
grep United $ tímyVyššie uvedený príkaz by sa vrátil do Manchester United a Newcastle United, ale nie do FC United Manchester.
04 z 09Počí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 fileAk bol vzor dvakrát porovnaný, číslo 2 sa vráti.
Pokračujte v čítaní nižšie
05 z 09Hľ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 skotsko
- glasgow skotsko
- liverpool Anglicko
- 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 $ placesVýsledok vráti by boli všetky miesta okrem colwyn bay.
To samozrejme funguje len pre miesta, ktoré končí v krajine (ťažko vedecké).
Výber môžete prevrátiť pomocou nasledujúcej syntaxe:
grep -v pozemky $ miestaToto by našlo všetky miesta, ktoré nekončili pozemkami.
06 z 09Ako 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 ^ $ miestaBohuž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 ^ $ miestaBolo 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 ^ $ miestaPokračujte v čítaní nižšie
07 z 09Ako 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 'A-Z'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 'a-z'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 09Hľ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 -" číslaAko 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 } -" číslaLomka 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.
Pokračujte v čítaní nižšie
09 z 09Použ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 -efZobrazia 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 firefoxzhrnutie
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.













