grep

30 príkladov Grep

30 príkladov Grep
Grep nájdete hlboko vo vnútri zvieracieho mozgu Unixu a operačných systémov podobných Unixu. Je to základný program používaný na porovnávanie vzorov a bol napísaný v 70. rokoch spolu so zvyškom nástroja UNIX, ktorý poznáme a milujeme (alebo nenávidíme).

Zatiaľ čo štúdium formálnych jazykov a regulárnych výrazov je vzrušujúca téma. Učenie grepu má oveľa viac ako regex. Ak s tým chcete začať a vidieť krásu a eleganciu grepu, musíte si najskôr pozrieť zopár príkladov z reálneho sveta.

Príklady, ktoré sú užitočné a uľahčujú vám život. Tu je 30 takýchto grep bežných prípadov a možností použitia.

1. ps aux | grep

V zozname ps aux sú uvedené všetky procesy a súvisiace pidy. Ale často je tento zoznam príliš dlhý na to, aby ho človek mohol prehliadnuť. Potrubovaním výstupu na príkaz grep môžete uviesť zoznam procesov bežiacich s veľmi konkrétnou aplikáciou. Napríklad môže byť sshd alebo nginx alebo httpd.

# ps aux | grep sshd
koreň 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
koreň 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ bodov / 0
koreň 1093 0.0 0.0 12784 932 bodov / 0 S + 18:29 0:00 grep sshd

2. Zdravím vaše IP adresy

Vo väčšine operačných systémov môžete zobraziť zoznam všetkých svojich sieťových rozhraní a adresy IP priradenej k danému rozhraniu pomocou príkazu ifconfig alebo ip addr. Oba tieto príkazy vyprodukujú množstvo ďalších informácií. Ak však chcete vytlačiť iba adresu IP (povedzme pre shell skripty), môžete použiť nasledujúci príkaz:

$ ip addr | grep inet | awk 'tlačiť 2 doláre; '
$ ip addr | grep -w inet | awk 'tlačiť 2 doláre; '# Pre linky iba s inet nie inet6 (IPv6)

Príkaz ip addr získa všetky podrobnosti (vrátane adries IP), potom sa odošle potrubím k druhému príkazu grep inet, z ktorého vychádzajú iba riadky, v ktorých je inet. Toto sa potom pipetuje do awk print príkazu, ktorý vytlačí druhé slovo v každom riadku (zjednodušene povedané).

P.S: Môžete to urobiť aj bez grepu, ak viete dobre, dobre viete.

3. Pri pohľade na neúspešné pokusy SSH

Ak máte server orientovaný na internet s verejnou adresou IP, bude neustále bombardovaný pokusmi SSH. Ak používateľom umožníte prístup SSH na základe hesla (politika, ktorú by som neodporúčal), môžete všetky takéto neúspešné pokusy zobraziť pomocou nasledujúci príkaz grep:

# cat / var / log / auth.prihlásiť sa | grep „Fail“
Ukážka vložená
5. decembra 16:20:03 debian sshd [509]: Zlyhané heslo pre root z 192.168.0.100 portov 52374 ssh2
5. decembra 16:20:07 debian sshd [509]: Neúspešné heslo pre root z 192.168.0.100 portov 52374 ssh2
5. decembra 16:20:11 debian sshd [509]: Zlyhané heslo pre root z 192.168.0.100 portov 52374 ssh2

4. Potrubie Grep do Uniq

Grep niekedy poskytne veľa informácií. V uvedenom príklade sa mohla do vášho systému pokúsiť zadať jedna adresa IP. Vo väčšine prípadov existuje len zopár takýchto priestupných adries IP, ktoré musíte jednoznačne identifikovať a umiestniť na čiernu listinu.

# cat / var / log / auth.prihlásiť sa | grep "Zlyhanie" | uniq -f 3

Príkaz uniq má tlačiť iba jedinečné riadky. Uniq -f 3 preskočí prvé tri polia (aby prehliadol časové značky, ktoré sa nikdy neopakujú) a potom začne hľadať jedinečné riadky.

5. Zdravím pre chybové správy

Používanie Grepu na prístup a protokoly chýb sa neobmedzuje iba na SSH. Webové servery (ako napríklad Nginx) logujú chyby a pristupujú k protokolom veľmi precízne. Ak nastavíte monitorovacie skripty, ktoré vám pošlú upozornenia, keď grep „404“ vráti novú hodnotu. To môže byť celkom užitočné.

# grep -w "404" / var / www / nginx / prístup.log
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] „GET / favicon.ico HTTP / 1.1 "404 200
„http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, ako Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] „GET / favicon.ico HTTP / 1.1 "404 143
„http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1 ako Mac OS X)
AppleWebKit / 605.1.15 (KHTML, ako Gecko) Verzia / 12.0 Mobil / 15E148 Safari / 604.1 "

Regulárny výraz nemusí byť „404“, ale niektoré ďalšie filtrovanie regulárneho výrazu iba pre mobilných klientov alebo iba pre zariadenia Apple prezerajúce webovú stránku. Vďaka tomu získate podrobnejší prehľad o výkonnosti vašej aplikácie.

6. Zoznam balíkov

Pre systémy založené na Debiane dpkg -l uvádza zoznam všetkých balíkov nainštalovaných vo vašom systéme. Môžete ho vložiť do príkazu grep a vyhľadať balíčky patriace konkrétnej aplikácii. Napríklad:

# dpkg -l | grep "vim"

7. grep -v fileNames

Ak chcete uviesť zoznam všetkých riadkov, ktoré nie obsahovať daný vzor, ​​použite príznak -v. Je to v podstate opak bežného príkazu grep.

8. grep -l

Uvádza zoznam všetkých súborov, ktoré obsahujú aspoň jeden výskyt dodaného vzoru. To je užitočné, keď hľadáte vzor v adresári s viacerými súbormi. Vytlačí sa iba názov súboru, a nie konkrétny riadok so vzorom.

9. Možnosť jedného slova -w

$ grep -w fileNames

Príznak -w hovorí, že grep má hľadať daný vzor ako celé slovo a nielen podreťazec riadku. Napríklad predtým sme privítali adresu IP a vzor inet vytlačil riadky oboma inet a inet6 zoznam adries IPv4 aj IPv6. Ak by sme ale použili príznak -w, iba riadky s inet ako slovo, za ktorým nasledujú biele medzery, je platná zhoda.

10. Rozšírený regulárny výraz

Často zistíte, že regulárne výrazy pôvodné pre Grep sú trochu obmedzujúce. Vo väčšine skriptov a pokynov nájdete použitie príznaku -E, čo vám umožní zadať vzor v takzvanom rozšírenom režime.

Tu sú príkazy grep a grep -E na hľadanie slov Superman a Spiderman.

$ grep "\ (Super | Spider \) man" text
$ grep -E „(Super | Spider) man“ text

Ako vidíte, predĺžená verzia sa číta oveľa ľahšie.

11. Grep pre vaše kontajnery

Ak na vašom hostiteľovi beží veľký klaster kontajnerov, môžete ich grepovať podľa názvu obrázka, stavu, portov, ktoré vystavujú, a mnohých ďalších atribútov. Napríklad,

$ docker ps | grep [imageName]

12. Grep pre vaše struky

Zatiaľ čo sme pri téme kontajnery. Kubernetes majú často tendenciu spúšťať v rámci daného nasadenia viac podov. Aj keď má každý modul jedinečný názov, v danom priestore názvov zvyčajne začína názvom nasadenia. Môžeme to grepnúť a vymenovať všetky pody spojené s daným nasadením.

$ kubectl získať struky | grep

13. Grep pre veľké dáta

Analýza takzvaných „veľkých údajov“ často zahŕňa jednoduché vyhľadávanie, triedenie a počítanie vzorov v danom súbore údajov. Obzvlášť dobré sú na tom nízkoúrovňové unixové nástroje ako grep, uniq, wc. Toto príspevok v blogu ukazuje pekný príklad úlohy splnenej za pouhých pár sekúnd pomocou grepu a ďalších unixových utilít, zatiaľ čo Hadoop trval takmer pol hodiny.

Napríklad toto súbor údajov je nad 1.Veľkosť 7 GB. Obsahuje informácie o množstve šachových zápasov vrátane vykonaných ťahov, víťazov atď. Zaujímajú nás iba výsledky, takže spustíme nasledujúci príkaz:

$ grep „Výsledok“ millionbase-2.22.pgn | triediť | uniq -c
221 [Výsledok "*"]
653728 [Výsledok "0-1"]
852305 [Výsledok „1-0“]
690934 [Výsledok "1 / 2-1 / 2"]

U 4-ročného procesora s 2 jadrami / 4 vláknami to trvalo asi 15 sekúnd. Až teda nabudúce budete riešiť problém „veľkých dát“. Popremýšľajte, či namiesto nich nemôžete použiť grep.

14. grep -color = auto

Táto možnosť umožňuje grepu zvýrazniť vzor vo vnútri riadku, kde bol nájdený.

15. grep -i

Pri porovnávaní vzorov grep sa vo svojej podstate rozlišujú veľké a malé písmená. Ak vám to však nevadí, potom použitie príznaku -i spôsobí, že grep nebude citlivý na malé a veľké písmená.

16. grep -n

Príznak -n zobrazí čísla riadkov, takže sa nemusíte báť nájsť ten istý riadok neskôr.

17. git grep

Git, systém na správu verzií, má sám o sebe zabudovaný príkaz grep, ktorý funguje skoro ako váš bežný grep. Môže sa však použiť na hľadanie vzorov na akomkoľvek potvrdenom strome pomocou natívneho rozhrania git CLI, namiesto zdĺhavých potrubí. Napríklad, ak ste v hlavnej vetve vášho repo, môžete cez repo grepovať pomocou:

(hlavný) $ git grep

18. grep -o

Príznak -o je skutočne užitočný, keď sa pokúšate ladiť regulárny výraz. Vytlačí sa iba zhoda časti riadku namiesto celého riadku. Takže v prípade, že získate príliš veľa nežiaducej čiary na dodaný vzor, ​​nemôžete pochopiť, prečo sa to deje. Pomocou príznaku -o môžete odtiaľ vytlačiť nevhodný podreťazec a dôvod svojho regulárneho výrazu.

19. grep -x

Príznak -x vytlačí riadok, len ak sa celý riadok zhoduje s vašim dodaným regulárnym výrazom. Je to niečo podobné ako príznak -w, ktorý vytlačil riadok, len ak sa celé slovo zhodovalo s dodaným regulárnym výrazom.

20. grep -T

Pri práci s protokolmi a výstupmi z shell skriptov je viac než pravdepodobné, že narazíte na tvrdé karty na rozlíšenie rôznych stĺpcov výstupu. Príznak -T tieto karty úhľadne zarovná, takže stĺpce sú prehľadne usporiadané, takže výstup bude čitateľný.

21. grep -q

Potlačí výstup a potichu spustí príkaz grep. Veľmi užitočné pri výmene textu alebo spustení grepu v skripte démona.

22. grep -P

Ľudia, ktorí sú zvyknutí na Perl syntax regulárneho výrazu, môžu použiť príznak -P na presné použitie toho. Nemusíte sa učiť základný regulárny výraz, ktorý grep štandardne používa.

23. grep -D [AKCIA]

V systéme Unix možno takmer všetko považovať za súbor. Z toho vyplýva, že na grep je možné napájať akékoľvek zariadenie, zásuvku alebo tok dát FIFO. Môžete použiť príznak -D nasledovaný AKCIOU (predvolená akcia je ČÍTAŤ). Niekoľko ďalších možností je SKIP na tiché preskočenie konkrétnych zariadení a RECURSE na rekurzívne prechádzanie adresárov a symbolických odkazov.

24. Opakovanie

Ak hľadáte daný vzor, ​​ktorý je opakovaním známeho jednoduchšieho vzoru, potom pomocou zložených zátvoriek označte počet opakovaní

$ grep -E „[0-9] 10“

Toto vytlačí riadky obsahujúce reťazce dlhé 10 alebo viac číslic.

25. Opakovacie skratky

Niektoré špeciálne znaky sú vyhradené pre konkrétny druh opakovania vzoru. Môžete ich použiť namiesto zložených zátvoriek, ak zodpovedajú vašim potrebám.

? : Vzor pred otáznikom by sa mal zhodovať s nulou alebo raz.

*: Vzor pred predchádzajúcou hviezdou by sa mal zhodovať s nulou alebo viackrát.

+ : Vzor pred plus by sa mal zhodovať jeden alebo viackrát.

25. Byte Offsets

Ak chcete vidieť posun bajtov riadkov, kde sa nachádza zodpovedajúci výraz, môžete na vytlačenie posunov použiť aj príznak -b. Ak chcete vytlačiť odsadenie iba zodpovedajúcej časti riadku, môžete použiť príznak -b s príznakom -o.

$ grep -b -o [názov súboru]

Ofset jednoducho znamená, po koľkých bajtoch od začiatku súboru sa začne zodpovedajúci reťazec.

26. egrep, fgrep a rgerp

Často budete vidieť vyvolanie egrep, aby ste mohli použiť syntax rozšíreného regulárneho výrazu, o ktorej sme hovorili vyššie. Toto je však zastaraná syntax a odporúčame vám, aby ste ju nepoužívali. Namiesto toho použite grep -E. Podobne použite grep -F namiesto fgrep a grep -r namiesto rgrep.

27. grep -z

Vstupom do grepu niekedy nie sú riadky končiace znakom nového riadku. Napríklad ak spracovávate zoznam názvov súborov, môžu pochádzať z rôznych zdrojov. Príznak -z hovorí, že grep má považovať znak NULL za koniec riadku. To vám umožní považovať prichádzajúci stream za akýkoľvek bežný textový súbor.

28. grep -a [názov súboru]

Príznak -a hovorí, že grep má s dodaným súborom zaobchádzať, akoby to bol bežný text. Súbor môže byť binárny, ale grep bude považovať obsah vo vnútri, akoby išlo o text.

29. grep -U [názov súboru]

Príznak -U hovorí, že grep má zaobchádzať s dodanými súbormi, akoby išlo o binárne súbory, nie o text. Podľa predvoleného nastavenia grep odhadne typ súboru pohľadom na prvých pár bajtov. Použitím tohto príznaku dôjde k prepísaniu, ktoré hádam funguje.

30. grep -m NUM

U veľkých súborov môže grepovanie výrazu trvať večne. Ak však chcete skontrolovať iba prvých NUM počtov zápasov, môžete to dosiahnuť pomocou príznaku -m. Je to rýchlejšie a výstup je často tiež zvládnuteľný.

Záver

Veľa každodenných úloh sysadmina zahŕňa preosievanie cez veľké množstvo textu. Môžu to byť protokoly zabezpečenia, protokoly z vášho webového alebo poštového servera, aktivita používateľa alebo dokonca veľký text manuálových stránok. Spoločnosť Grep vám dáva extra veľkú flexibilitu pri riešení týchto prípadov použitia.

Dúfajme, že vyššie uvedených niekoľko príkladov a prípadov použitia vám pomohlo lepšie pochopiť túto živú fosíliu softvéru.

Hry Ako zobraziť počítadlo FPS v hrách Linux
Ako zobraziť počítadlo FPS v hrách Linux
Hranie na systéme Linux získalo veľký tlak, keď spoločnosť Valve v roku 2012 oznámila podporu systému Linux pre klienta Steam a ich hry. Od tej doby s...
Hry Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Úvod do hry Civilization 6 predstavuje moderné poňatie klasického konceptu predstaveného v sérii hier Age of Empires. Myšlienka bola dosť jednoduchá; ...
Hry Ako inštalovať a hrať Doom na Linuxe
Ako inštalovať a hrať Doom na Linuxe
Úvod do Doom Séria Doom vznikla v 90. rokoch po vydaní pôvodného Doomu. Bol to okamžitý hit a od tej doby herná séria získala množstvo ocenení a origi...