grep

30 primjera grepa

30 primjera grepa
Možete pronaći grep prisutan duboko u životinjskom mozgu Unixa i operativnih sustava sličnih Unixu. To je osnovni program koji se koristi za podudaranje uzoraka, a napisan je 70-ih godina zajedno s ostatkom UNIX alata koji poznajemo i volimo (ili mrzimo).

Iako je učenje o formalnim jezicima i regularnim izrazima uzbudljiva tema. Učenje grep-a ima puno više od regeksa. Da biste započeli s tim i da biste vidjeli ljepotu i eleganciju grepa, prvo morate vidjeti nekoliko primjera iz stvarnog svijeta.

Primjeri koji su vam korisni i čine vam život malo lakšim. Evo 30 takvih grep uobičajenih slučajeva i opcija.

1. ps pomoćni | grep

PS aux popis svih procesa i njihovih povezanih pida. Ali često je ovaj popis predug da bi ga čovjek mogao pregledati. Preusmjeravajući izlaz na naredbu grep, možete navesti procese koji se izvode s vrlo specifičnom aplikacijom na umu. Na primjer može biti sshd ili nginx ili httpd.

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

2. Grepping vaše IP adrese

U većini operativnih sustava možete navesti sva svoja mrežna sučelja i IP koji je dodijeljen tom sučelju pomoću naredbe ifconfig ili ip addr. Obje ove naredbe iznijet će puno dodatnih informacija. Ali ako želite ispisati samo IP adresu (recimo za skripte ljuske), tada možete koristiti naredbu u nastavku:

$ ip adresa | grep inet | awk 'ispis 2 $; '
$ ip adresa | grep -w inet | awk 'ispis 2 $; '# Za linije s samo inetom, a ne inet6 (IPv6)

Naredba ip addr dobiva sve detalje (uključujući IP adrese), a zatim se preusmjerava na drugu naredbu grep inet koja izbacuje samo retke s inetom u njima. To se zatim stavlja u awk print iskaz koji ispisuje drugu riječ u svakom retku (pojednostavljeno rečeno).

Str.S: To možete učiniti i bez grepa ako znate awk dobro znate.

3. Gledajući neuspjele pokušaje SSH-a

Ako imate poslužitelj s Internetom, s javnom IP-om, on će se neprestano bombardirati SSH pokušajima, a ako dopustite korisnicima da imaju SSH pristup zasnovan na lozinci (pravilo koje ne bih preporučio), sve takve neuspjele pokušaje možete vidjeti pomoću sljedeća grep naredba:

# cat / var / log / auth.zapisnik | grep "Neuspjeh"
Uzorak stavljen
5. prosinca 16:20:03 debian sshd [509]: Neuspjela lozinka za root iz 192.168.0.100 priključak 52374 ssh2
5. prosinca 16:20:07 debian sshd [509]: Neuspjela lozinka za root iz 192.168.0.100 priključak 52374 ssh2
5. prosinca 16:20:11 debian sshd [509]: Neuspjela lozinka za root iz 192.168.0.100 priključak 52374 ssh2

4. Cjevovod Grep do Uniq

Ponekad će grep dati puno informacija. U gornjem primjeru, možda je jedan IP pokušavao ući u vaš sustav. U većini slučajeva postoji samo nekolicina takvih nasilnih IP adresa koje trebate jedinstveno identificirati i staviti na crnu listu.

# cat / var / log / auth.zapisnik | grep "Neuspjeh" | uniq -f 3

Naredba uniq trebala bi ispisati samo jedinstvene retke. Uniq -f 3 preskače prva tri polja (da bi se previdjeli vremenski žigovi koji se nikad ne ponavljaju), a zatim započinje traženje jedinstvenih linija.

5. Grepping za poruke o pogreškama

Korištenje Grepa za pristup zapisima i pogreškama nije ograničeno samo na SSH. Web-poslužitelji (poput Nginxa) evidentiraju pogreške i evidentiraju pristup zapisnicima vrlo precizno. Ako postavite nadzorne skripte koje vam šalju upozorenja kada grep "404" vrati novu vrijednost. To može biti vrlo korisno.

# grep -w "404" / var / www / nginx / pristup.zapisnik
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, poput 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 poput Mac OS X)
AppleWebKit / 605.1.15 (KHTML, poput Gecko) Verzija / 12.0 Mobitel / 15E148 Safari / 604.1 "

Redovni izraz možda nije "404", već neki drugi filtriranje regularnih izraza samo za mobilne klijente ili samo za Apple uređaje koji pregledavaju web stranicu. To vam omogućuje dublji uvid u izvedbu vaše aplikacije.

6. Popis paketa

Za sustave temeljene na Debianu, dpkg -l navodi sve pakete instalirane na vašem sustavu. To možete uvesti u grep naredbu kako biste tražili pakete koji pripadaju određenoj aplikaciji. Na primjer:

# dpkg -l | grep "vim"

7. grep -v fileNames

Da nabrojim sve retke koji nemoj sadrže zadani uzorak, upotrijebite zastavicu -v. U osnovi je suprotno od uobičajene grep naredbe.

8. grep -l

Navodi sve datoteke koje sadrže barem jednu pojavu isporučenog uzorka. Ovo je korisno kada tražite obrazac unutar direktorija s više datoteka. Ispisuje samo naziv datoteke, a ne određenu liniju s uzorkom.

9. Opcija jedne riječi -w

$ grep -w fileNames

Oznaka -w govori grepu da zadani uzorak traži kao cijelu riječ, a ne samo kao podniz niza. Na primjer, ranije smo se grepali za IP adresu i uzorak inet ispisao redove s obje inet i inet6 navodeći i IPv4 i IPv6 adrese. Ali ako smo koristili -w označavamo samo crte s inet kao što je riječ kojoj prethode i iza koje slijede razmaci valjano podudaranje.

10. Prošireno redovito izražavanje

Često ćete otkriti da su regularni izrazi Grepa pomalo ograničavajući. U većini skripti i uputa pronaći ćete upotrebu zastavice -E, a to će vam omogućiti unos uzorka u ono što se naziva Prošireni način rada.

Evo naredbi grep i grep -E za traženje riječi Superman i Spiderman.

$ grep "\ (Super | Spider \) man" tekst
$ grep -E "(Super | Spider) čovjek" tekst

Kao što vidite, proširenu verziju je puno lakše čitati.

11. Grep za vaše spremnike

Ako na vašem hostu radi velika klastera spremnika, možete ih grepirati prema imenu slike, statusu, lukama koje izlažu i mnogim drugim atributima. Na primjer,

$ docker ps | grep [imageName]

12. Grep za vaše mahune

Dok smo na temi kontejnera. Kubernetes često imaju tendenciju pokretati višestruke mahune pod određenim rasporedom. Iako svaki mahuna ima jedinstveno ime, u danom prostoru imena oni obično počinju s imenom implementacije. Možemo to shvatiti i navesti sve mahune povezane s danom implementacijom.

$ kubectl dobiti mahune | grep

13. Grep za velike podatke

Često puta takozvana analiza „velikih podataka“ uključuje jednostavno pretraživanje, sortiranje i brojanje uzoraka u danom skupu podataka. UNIX uslužni programi niske razine poput grep, uniq, wc posebno su dobri u tome. Ovaj post na blogu prikazuje lijep primjer zadatka izvedenog u samo nekoliko sekundi korištenjem grep-a i drugih Unix-ovih uslužnih programa dok je Hadoopu trebalo gotovo pola sata.

Na primjer, ovo skup podataka je preko 1.Veličina 7 GB. Sadrži informacije o mnoštvu šahovskih utakmica, uključujući poteze, tko je pobijedio itd. Zanimaju nas samo rezultati pa izvodimo sljedeću naredbu:

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

To je trajalo oko 15 sekundi na četverogodišnjem procesoru s 2 jezgre / 4 niti. Dakle, sljedeći put kada budete rješavali problem "velikih podataka". Razmislite možete li umjesto toga koristiti grep.

14. grep -color = auto

Ova opcija omogućuje grep označavanje uzorka unutar crte na kojoj je pronađen.

15. grep -i

Podudaranje uzorka Grep u osnovi razlikuje velika i mala slova. Ali ako vas nije briga za to, upotreba zastavice -i učinit će grep neosjetljivim.

16. grep -n

Oznaka -n prikazivat će brojeve linija, tako da kasnije ne morate brinuti o pronalaženju iste linije.

17. git grep

Git, sustav za upravljanje verzijama, sam ima ugrađenu grep naredbu koja djeluje prilično slično vašem uobičajenom grepu. No, može se koristiti za traženje uzoraka na bilo kojem uređenom stablu koristeći izvorni git CLI, umjesto zamornih cijevi. Na primjer, ako ste u glavnoj grani vašeg repo-a, možete se grepnuti preko repo-a koristeći:

(master) $ git grep

18. grep -o

Oznaka -o zaista je korisna kada pokušavate otkloniti pogreške s regularnim izrazom. Ispisat će samo odgovarajući dio retka, umjesto cijelog retka. Dakle, u slučaju da dobivate previše neželjenih linija za isporučeni obrazac i ne možete razumjeti zašto se to događa. Možete koristiti zastavicu -o da biste odatle ispisali uvredljivi podniz i obrazloženje vašeg regularnog izraza.

19. grep -x

Oznaka -x ispisat će redak, ako i samo ako se cijeli redak podudara s vašim isporučenim regularnim izrazom. To je donekle slično zastavi -w koja je ispisala redak ako se i samo cijele riječi podudara s isporučenim regularnim izrazom.

20. grep -T

Kada se bavite zapisnicima i izlazima skripti ljuske, više je vjerojatno da ćete naići na tvrde kartice za razlikovanje različitih stupaca rezultata. Oznaka -T uredno će poravnati ove kartice tako da su stupci uredno poredani, čineći izlaz čitljivim.

21. grep -q

Ovo potiskuje izlaz i tiho pokreće grep naredbu. Vrlo korisno pri zamjeni teksta ili pokretanju grep-a u daemon skripti.

22. grep -P

Ljudi koji su navikli na perl sintaksu regularnog izraza mogu upotrijebiti zastavicu -P da bi koristili upravo to. Ne morate naučiti osnovni regularni izraz, koji grep koristi prema zadanim postavkama.

23. grep -D [AKCIJA]

U Unixu se gotovo sve može tretirati kao datoteka. Slijedom toga, bilo koji uređaj, utičnica ili FIFO tok podataka mogu se uvesti u grep. Možete koristiti zastavicu -D nakon čega slijedi AKCIJA (zadana radnja je PROČITAJ). Nekoliko drugih mogućnosti su SKIP za tiho preskakanje određenih uređaja i RECURSE za rekurzivno pregledavanje direktorija i simboličkih veza.

24. Ponavljanje

Ako tražite zadani obrazac koji je ponavljanje poznatog jednostavnijeg uzorka, tada upotrijebite kovrčave zagrade kako biste označili broj ponavljanja

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

Ovo ispisuje retke koji sadrže nizove duge 10 ili više znamenki.

25. Stenografije ponavljanja

Neki posebni znakovi rezervirani su za određenu vrstu ponavljanja uzoraka. Možete ih koristiti umjesto kovrčavih zagrada, ako odgovaraju vašim potrebama.

? : Uzorak koji prethodi upitniku trebao bi odgovarati nuli ili jednom.

*: Uzorak koji prethodi zvijezdi trebao bi se podudarati nula ili više puta.

+ : Uzorak koji prethodi plusu trebao bi se podudarati jedan ili više puta.

25. Pomicanje bajtova

Ako želite znati vidi li pomak bajta linija u kojima se nalazi odgovarajući izraz, možete upotrijebiti zastavicu -b i za ispis pomaka. Da biste ispisali pomak samo odgovarajućeg dijela crte, možete upotrijebiti zastavicu -b sa zastavicom -o.

$ grep -b -o [naziv datoteke]

Pomak jednostavno znači, nakon koliko bajta s početka datoteke započinje odgovarajući niz.

26. egrep, fgrep i rgerp

Često ćete vidjeti pozivanje egrepa da biste koristili proširenu sintaksu regularnog izraza o kojoj smo ranije razgovarali. Međutim, ovo je zastarjela sintaksa i preporučuje se izbjegavanje upotrebe ove. Umjesto toga upotrijebite grep -E. Slično tome, koristite grep -F, umjesto fgrep i grep -r umjesto rgrep.

27. grep -z

Ponekad ulaz u grep nisu linije koje završavaju znakom novog retka. Na primjer, ako obrađujete popis naziva datoteka, oni mogu doći iz različitih izvora. Oznaka -z govori grepu da tretira NULL znak kao završetak retka. To vam omogućuje tretiranje dolaznog toka kao bilo koje uobičajene tekstualne datoteke.

28. grep -a [naziv datoteke]

Oznaka -a govori grepu da se s isporučenom datotekom ponaša kao s uobičajenim tekstom. Datoteka bi mogla biti binarna, ali grep će sadržaje u sebi tretirati kao da su tekst.

29. grep -U [naziv datoteke]

Oznaka -U govori grepu da tretira isporučene datoteke kao da su binarne datoteke, a ne tekst. Prema zadanim postavkama grep pogađa vrstu datoteke gledajući prvih nekoliko bajtova. Korištenje ove zastave odbacuje to što pogađa.

30. grep -m NUM

S velikim datotekama grepping za izraz može trajati vječno. Međutim, ako želite provjeriti samo prvih NUM brojeva podudaranja, upotrijebite zastavicu -m da biste to postigli. Brži je, a izlazom je često moguće upravljati.

Zaključak

Mnogo svakodnevnog posla sysadmina uključuje prosijavanje velikih dijelova teksta. To mogu biti sigurnosni zapisnici, zapisnici s vašeg web ili poslužitelja pošte, aktivnosti korisnika ili čak veliki tekst man stranica. Grep vam pruža dodatnu fleksibilnost pri rješavanju ovih slučajeva korištenja.

Nadamo se da su vam nekoliko gornjih primjera i slučajeva upotrebe pomogli u boljem razumijevanju ovog živog fosila softvera.

Instalirajte najnoviju strategiju igre OpenRA na Ubuntu Linux
OpenRA je Libre / Free Real Time strateški pokretač igre koji stvara rane Westwoodove igre poput klasične Command & Conquer: Red Alert. Distribuirani ...
Instalirajte najnoviji Dolphin Emulator za Gamecube i Wii na Linux
Dolphin Emulator omogućuje vam igranje odabranih Gamecube i Wii igara na Linux osobnim računalima (PC). Dolphin Emulator je slobodno dostupan i emula...
Kako koristiti GameConqueror Cheat Engine u Linuxu
Članak pokriva vodič o korištenju GameConqueror varalice u Linuxu. Mnogi korisnici koji igraju igre na sustavu Windows često koriste aplikaciju "Cheat...