grep

30 primerov grep

30 primerov grep
Grep je prisoten globoko v živalskih možganih Unixa in Unixu podobnih operacijskih sistemov. To je osnovni program, ki se uporablja za ujemanje vzorcev in je bil napisan v 70. letih skupaj z ostalim orodjem UNIX, ki ga poznamo in ga ljubimo (ali sovražimo).

Medtem ko je učenje formalnih jezikov in regularnih izrazov vznemirljiva tema. Učenje grep ima veliko več kot regularni izrazi. Če želite začeti z njim in videti lepoto in eleganco grepa, morate najprej videti nekaj primerov iz resničnega sveta.

Primeri, ki so priročni in vam nekoliko olajšajo življenje. Tu je 30 takih primerov in možnosti običajne uporabe grep.

1. ps pomožni | grep

V ps aux so navedeni vsi postopki in z njimi povezani pidi. Toda pogosto je ta seznam predolg, da bi ga človek lahko pregledal. Če usmerite izhod v ukaz grep, lahko naštejete procese, ki se izvajajo z zelo specifično aplikacijo. Na primer lahko sshd ali nginx ali httpd.

# ps pomožno | grep sshd
koren 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
koren 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ pts / 0
koren 1093 0.0 0.0 12784 932 pts / 0 S + 18:29 0:00 grep sshd

2. Grepping vaše naslove IP

V večini operacijskih sistemov lahko z ukazom ifconfig ali ip addr navedete vse svoje omrežne vmesnike in IP, ki mu je dodeljen. Oba ukaza bosta dala veliko dodatnih informacij. Če pa želite natisniti samo naslov IP (recimo za skripte lupine), lahko uporabite spodnji ukaz:

$ ip addr | grep inet | awk 'natisni 2 $; '
$ ip addr | grep -w inet | awk 'natisni 2 $; '# Za vrstice s samo inet ne inet6 (IPv6)

Ukaz ip addr dobi vse podrobnosti (vključno z naslovi IP), nato se preusmeri v drugi ukaz grep inet, ki prikaže samo vrstice z inetom v njih. Ta se nato v awk natisne stavek, ki v vsako vrstico natisne drugo besedo (poenostavljeno).

P.S: To lahko storite tudi brez grepa, če veste, da awk dobro ve.

3. Če pogledamo neuspešne poskuse SSH

Če imate internetni strežnik z javnim IP-jem, ga bodo neprestano zasipali s poskusi SSH in če uporabnikom omogočite dostop do SSH na podlagi gesla (pravilnik, ki ga ne priporočam), lahko vidite vse take neuspele poskuse z uporabo naslednji grep ukaz:

# cat / var / log / auth.dnevnik | grep “Fail”
Vzorec postavljen
5. december 16:20:03 debian sshd [509]: Neuspešno geslo za root od 192.168.0.100 vrat 52374 ssh2
5. december 16:20:07 debian sshd [509]: Neuspešno geslo za root od 192.168.0.100 vrat 52374 ssh2
5. december 16:20:11 debian sshd [509]: Neuspešno geslo za root od 192.168.0.100 vrat 52374 ssh2

4. Cevovod Grep do Uniq

Včasih bo grep izdal veliko informacij. V zgornjem primeru je poskušal v vaš sistem vstopiti en sam IP. V večini primerov je le nekaj takih nasilnih naslovov IP, ki jih morate enolično prepoznati in uvrstiti na črni seznam.

# cat / var / log / auth.dnevnik | grep "Fail" | uniq -f 3

Ukaz uniq naj bi natisnil samo unikatne vrstice. Uniq -f 3 preskoči prva tri polja (da spregleda časovne žigove, ki se nikoli ne ponovijo) in nato začne iskati unikatne vrstice.

5. Grepping za sporočila o napakah

Uporaba Grepa za dnevnike dostopa in napak ni omejena samo na SSH. Spletni strežniki (kot je Nginx) zelo natančno beležijo napake in dnevnike dostopa. Če nastavite nadzorne skripte, ki vam pošiljajo opozorila, ko grep »404« vrne novo vrednost. To je lahko zelo koristno.

# grep -w "404" / var / www / nginx / access.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, kot 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, kot je Mac OS X)
AppleWebKit / 605.1.15 (KHTML, kot Gecko) Različica / 12.0 Mobile / 15E148 Safari / 604.1 "

Redovni izraz morda ni "404", ampak nekaj drugega filtriranja regularnih izrazov samo za mobilne odjemalce ali samo za naprave Apple, ki si ogledujejo spletno stran. To vam omogoča globlji vpogled v uspešnost vaše aplikacije.

6. Seznam paketov

Za sisteme, ki temeljijo na Debianu, dpkg -l našteva vse pakete, nameščene v vašem sistemu. To lahko prenesete v ukaz grep, da poiščete pakete, ki pripadajo določeni aplikaciji. Na primer:

# dpkg -l | grep "vim"

7. grep -v fileNames

Če želite našteti vse vrstice, ki ne vsebujejo dani vzorec, uporabite zastavico -v. V bistvu je nasprotje običajnemu ukazu grep.

8. grep -l

Navede vse datoteke, ki vsebujejo vsaj en pojav vnesenega vzorca. To je koristno, ko iščete vzorec v imeniku z več datotekami. Natisne samo ime datoteke, ne pa tudi posebne vrstice z vzorcem.

9. Možnost ene besede -w

$ grep -w fileNames

Oznaka -w sporoča grepu, naj da vzorec kot celotno besedo in ne le kot podniz vrstice. Na primer, prej smo zagrabili naslov IP in vzorec inet natisnil vrstice z obema inet in inet6 seznam naslovov IPv4 in IPv6. Če pa smo uporabili -w, označite samo vrstice z inet ker je beseda, pred katero sledijo presledki, veljavno ujemanje.

10. Razširjeni redni izraz

Pogosto boste ugotovili, da so regularni izrazi, ki izvirajo iz Grepa, nekoliko omejujoči. V večini skriptov in navodil boste našli uporabo zastavice -E, kar vam bo omogočilo vnos vzorca v tako imenovani razširjeni način.

Tukaj sta ukaza grep in grep -E za iskanje besed Superman in Spiderman.

$ grep "\ (Super | Spider \) človek" besedilo
$ grep -E "(Super | Spider) moški" besedilo

Kot vidite, je razširjeno različico veliko lažje brati.

11. Grep za vaše posode

Če imate na svojem gostitelju veliko skupino vsebnikov, jih lahko zapišete glede na ime slike, stanje, vrata, ki jih izpostavljajo, in številne druge atribute. Na primer,

$ docker ps | grep [imageName]

12. Grep za vaše stroke

Medtem ko smo na temi zabojnikov. Kubernetes pogosto navadno zaženejo več pods pod določeno razmestitvijo. Medtem ko ima vsak strojno enolično ime, se v določenem imenskem prostoru običajno začne z imenom razmestitve. Lahko grep to in seznam vseh pods, povezane z dano razmestitev.

$ kubectl dobi stroke | grep

13. Grep za velike podatke

Pogosto tako imenovana analiza „velikih podatkov“ vključuje preprosto iskanje, razvrščanje in štetje vzorcev v določenem naboru podatkov. Pri tem so še posebej dobri pripomočki UNIX na nizki ravni, kot so grep, uniq, wc. To objava v spletnem dnevniku prikazuje lep primer opravila, opravljenega v nekaj sekundah z uporabo grep in drugih pripomočkov Unix, medtem ko je Hadoop trajal skoraj pol ure.

Na primer to podatkovni niz je več kot 1.Velikost 7 GB. Vsebuje informacije o množici šahovskih tekem, vključno s potezami, kdo je zmagal itd. Zanimajo nas samo rezultati, zato zaženemo naslednji ukaz:

$ grep "Rezultat" millionbase-2.22.pgn | razvrsti | uniq -c
221 [Rezultat "*"]
653728 [Rezultat "0-1"]
852305 [Rezultat "1-0"]
690934 [Rezultat "1 / 2-1 / 2"]

To je trajalo približno 15 sekund pri 4-letnem 2-jedrnem / 4-nitnem procesorju. Torej, naslednjič, ko boste rešili težavo z »velikimi podatki«. Pomislite, ali lahko namesto tega uporabite grep.

14. grep -color = samodejno

Ta možnost omogoča, da grep označi vzorec znotraj črte, kjer je bil najden.

15. grep -i

Ujemanje vzorcev Grep je samo po sebi občutljivo na velike in male črke. Če pa vam je vseeno za to, bo uporaba zastavice -i naredila grep neobčutljiv.

16. grep -n

Oznaka -n bo prikazala številke vrstic, tako da vam kasneje ni treba iskati iste vrstice.

17. git grep

Git, sistem za nadzor različic, ima vgrajen ukaz grep, ki deluje podobno kot vaš običajni grep. Lahko pa ga uporabimo za iskanje vzorcev na katerem koli zavezanem drevesu z uporabo izvornega git CLI, namesto dolgočasnih cevi. Na primer, če ste v glavni veji svojega repoja, lahko zgrešite po repoju z uporabo:

(mojster) $ git grep

18. grep -o

Oznaka -o je zelo koristna, ko poskušate odpraviti napake v regularnem izrazu. Natisnil bo samo ustrezni del vrstice, namesto celotne vrstice. Torej, v primeru, da dobite preveč neželene črte za dobavljeni vzorec in ne morete razumeti, zakaj se to dogaja. Z zastavico -o lahko od tam natisnete kršitveni podniz in obrazložite svoj regularni izraz.

19. grep -x

Oznaka -x bi natisnila vrstico, če in samo, če se celotna vrstica ujema z dobavljenim regularnim izrazom. To je nekoliko podobno zastavi -w, ki je natisnila vrstico, če se le ena beseda ujema s priloženim regularnim izrazom.

20. grep -T

Pri obravnavi dnevnikov in izhodov iz skriptov lupine boste več kot verjetno naleteli na trde zavihke za razlikovanje med različnimi stolpci izhoda. Oznaka -T bo te zavihke lepo poravnala, tako da bodo stolpci lepo razporejeni, tako da bo izhodno berljiv.

21. grep -q

To zatre izhod in tiho zažene ukaz grep. Zelo uporabno pri zamenjavi besedila ali zagonu grep-a v skriptu demona.

22. grep -P

Ljudje, ki so navajeni perl sintakso regularnih izrazov, lahko uporabljajo zastavico -P, da uporabijo točno to. Ni vam treba naučiti osnovnega regularnega izraza, ki ga grep privzeto uporablja.

23. grep -D [AKCIJA]

V Unixu lahko skoraj vse obravnavamo kot datoteko. Posledično lahko katero koli napravo, vtičnico ali tok podatkov FIFO prenesemo v grep. Lahko uporabite zastavico -D, ki ji sledi AKCIJA (privzeto dejanje je PREBERI). Nekaj ​​drugih možnosti je SKIP za tiho preskakovanje določenih naprav in RECURSE za rekurzivno pregledovanje imenikov in povezav.

24. Ponovitev

Če iščete dani vzorec, ki je ponovitev znanega enostavnejšega vzorca, potem s skodranimi oklepaji označite število ponovitev

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

To natisne vrstice, ki vsebujejo nize, dolge 10 ali več števk.

25. Okrajšave za ponavljanje

Nekateri posebni znaki so rezervirani za določeno vrsto ponavljanja vzorcev. Te lahko uporabite namesto skodranih oklepajev, če ustrezajo vašim potrebam.

? : Vzorec pred vprašajem se mora ujemati nič ali enkrat.

*: Vzorec pred zvezdo se mora ujemati nič ali večkrat.

+ : Vzorec pred plusom se mora ujemati enkrat ali večkrat.

25. Odmiki bajtov

Če želite vedeti, kakšen odmik bajtov je vrstic, kjer je najden ujemajoč se izraz, lahko z zastavico -b natisnete tudi zamike. Če želite natisniti odmik samo ustreznega dela črte, lahko uporabite zastavico -b z zastavico -o.

$ grep -b -o [Ime datoteke]

Odmik preprosto pomeni, po koliko bajtih od začetka datoteke se začne ujemajoči se niz.

26. egrep, fgrep in rgerp

Pogosto boste videli klic egrepa, če želite uporabiti razširjeno sintakso regularnih izrazov, o kateri smo že govorili. Vendar je to zastarela skladnja in priporočamo, da se je izogibate. Namesto tega uporabite grep -E. Podobno uporabite grep -F namesto fgrep in grep -r namesto rgrep.

27. grep -z

Včasih vnos v grep niso vrstice, ki se končajo z znakom nove vrstice. Če na primer obdelujete seznam imen datotek, lahko pridejo iz različnih virov. Oznaka -z sporoča grepu, naj NULL obravnava kot zaključek vrstice. To vam omogoča, da dohodni tok obravnavate kot katero koli običajno besedilno datoteko.

28. grep -a [Ime datoteke]

Oznaka -a pove, da grep obravnavano priloženo datoteko obravnava kot običajno besedilo. Datoteka je lahko binarna, vendar bo grep vsebino v njej obravnaval, kot da je besedilo.

29. grep -U [Ime datoteke]

Oznaka -U sporoča grepu, da priložene datoteke obravnava, kot da gre za binarne datoteke in ne za besedilo. Privzeto grep ugane vrsto datoteke, tako da pogleda prvih nekaj bajtov. Uporaba te zastavice preglasi, da ugiba.

30. grep -m ŠT

Pri velikih datotekah lahko risanje izraza traja večno. Če pa želite preveriti le prvih NUM številk ujemanj, lahko to uporabite z zastavico -m. Je hitrejši in tudi izhod je pogosto obvladljiv.

Zaključek

Veliko vsakdanjega dela sysadmina vključuje prebiranje velikih delov besedila. To so lahko varnostni dnevniki, dnevniki vašega spletnega ali poštnega strežnika, dejavnost uporabnikov ali celo veliko besedilo strani z informacijami. Grep vam nudi dodatno prilagodljivost pri obravnavi teh primerov uporabe.

Upamo, da so vam zgornji primeri in primeri uporabe pomagali pri boljšem razumevanju tega živega fosila programske opreme.

Najboljši Linux Distros za igre na srečo v letu 2021
Operacijski sistem Linux je daleč od prvotnega, preprostega, strežniškega videza. Ta OS se je v zadnjih letih izjemno izboljšal in se je zdaj razvil v...
Kako zajeti in pretakati svojo igralno sejo v Linuxu
V preteklosti je bilo igranje iger le hobi, sčasoma pa je igralniška industrija zabeležila veliko rast glede tehnologije in števila igralcev. Občinstv...
Najboljše igre z ročnim sledenjem
Oculus Quest je pred kratkim predstavil odlično idejo ročnega sledenja brez krmilnikov. Z vedno večjim številom iger in dejavnosti, ki izvajajo podpor...