grep

30 Grep piemēri

30 Grep piemēri
Jūs varat atrast grep, kas atrodas dziļi Unix un Unix līdzīgu operētājsistēmu dzīvnieku smadzenēs. Tā ir pamata programma, ko izmanto modeļu saskaņošanai, un tā tika uzrakstīta 70. gados kopā ar pārējo UNIX rīku, kuru mēs pazīstam un mīlam (vai ienīstam).

Lai gan oficiālu valodu un regulāru izteicienu mācīšanās ir aizraujoša tēma. Mācīšanās grep ir daudz vairāk nekā regexes. Lai sāktu ar to un redzētu grep skaistumu un eleganci, vispirms ir jāapskata daži reālās pasaules piemēri.

Piemēri, kas ir ērti un nedaudz atvieglo jūsu dzīvi. Šeit ir 30 šādi grep parastās lietošanas gadījumi un iespējas.

1. ps aux | grep

Ps aux uzskaita visus procesus un ar tiem saistītos pidus. Bet bieži vien šis saraksts ir pārāk garš, lai cilvēks to varētu pārbaudīt. Pārvietojot izvadi uz grep komandu, varat uzskaitīt procesus, kas darbojas, ņemot vērā ļoti specifisku lietojumprogrammu. Piemēram var būt sshd vai nginx vai httpd.

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

2. Grepping jūsu IP adreses

Lielākajā daļā operētājsistēmu varat uzskaitīt visas tīkla saskarnes un šai saskarnei piešķirto IP, izmantojot komandu ifconfig vai ip addr. Abas šīs komandas izdos daudz papildu informācijas. Bet, ja vēlaties izdrukāt tikai IP adresi (teiksim, čaulas skriptiem), varat izmantot tālāk norādīto komandu:

$ ip addr | grep inet | awk 'print $ 2;
$ ip addr | grep -w inet | awk 'print $ 2; '#Līnijām ar tikai inet, nevis inet6 (IPv6)

Komanda ip addr iegūst visu informāciju (ieskaitot IP adreses), pēc tam tā tiek novirzīta uz otro komandu grep inet, kas izvada tikai līnijas ar inet tajās. Pēc tam tas tiek ievietots awk izdrukāt paziņojumu, kas izdrukā otro vārdu katrā rindā (vienkārši sakot).

P.S: To var izdarīt arī bez grep, ja jūs zināt awk labi zināt.

3. Aplūkojot neveiksmīgus SSH mēģinājumus

Ja jums ir serveris, kas vērsts uz internetu, ar publisku IP, tas pastāvīgi tiks bombardēts ar SSH mēģinājumiem, un, ja jūs atļaujat lietotājiem piekļūt SSH piekļuvei uz paroli (politika, kuru es neieteiktu), visus šādus neveiksmīgos mēģinājumus varat redzēt, izmantojot: šādu grep komandu:

# cat / var / log / auth.žurnāls | grep “Fail”
Izlases paraugs
5. decembris 16:20:03 debian sshd [509]: Neizdevās parole saknei no 192.168. lpp.0.100 osta 52374 ssh2
5. decembris 16:20:07 debian sshd [509]: Neizdevās parole saknei no 192.168. lpp.0.100 osta 52374 ssh2
5. decembris 16:20:11 debian sshd [509]: Neizdevās parole saknei no 192.168. lpp.0.100 osta 52374 ssh2

4. Caurule Grep uz Uniq

Dažreiz grep izdos daudz informācijas. Iepriekš minētajā piemērā, iespējams, viens IP mēģināja ievadīt jūsu sistēmu. Vairumā gadījumu ir tikai nedaudz šādu pārkāpēju IP, kas jums unikāli jāidentificē un jāiekļauj melnajā sarakstā.

# cat / var / log / auth.žurnāls | grep "Neveiksme" | uniq -f 3

Paredzams, ka komanda uniq drukās tikai unikālās līnijas. Uniq -f 3 izlaiž pirmos trīs laukus (lai nepamanītu nekad neatkārtotos laika zīmogus) un pēc tam sāk meklēt unikālas līnijas.

5. Grepping par kļūdu ziņojumiem

Grep izmantošana piekļuves un kļūdu žurnālos nav tikai SSH. Tīmekļa serveri (piemēram, Nginx) reģistrē kļūdas un piekļuves žurnālus diezgan rūpīgi. Ja iestatāt uzraudzības skriptus, kas jums sūta brīdinājumus, kad grep “404” atgriež jaunu vērtību. Tas var būt diezgan noderīgi.

# grep -w "404" / var / www / nginx / piekļuve.žurnāls
192.168. lpp.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] "GET / favicon.ico HTTP / 1.1 "404 200
"http: // 192.168. lpp.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, piemēram, Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168. lpp.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] "GET / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168. lpp.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1, piemēram, Mac OS X)
AppleWebKit / 605.1.15 (KHTML, piemēram, Gecko) versija / 12.0 Mobilais / 15E148 Safari / 604.1 "

Regex izteiksme var nebūt “404”, bet daži citi regex filtrēšana tikai mobilajiem klientiem vai tikai Apple ierīcēm, kas skata vietni. Tas ļauj iegūt dziļāku ieskatu par jūsu lietotnes veiktspēju.

6. Iepakojumu saraksts

Debian balstītās sistēmās dpkg -l ir uzskaitītas visas jūsu sistēmā instalētās paketes. To var ievadīt komandā grep, lai meklētu paketes, kas pieder konkrētai lietojumprogrammai. Piemēram:

# dpkg -l | grep "vim"

7. grep -v fileNames

Lai uzskaitītu visas rindas, kuras nevajag satur noteiktu modeli, izmantojiet karodziņu -v. Būtībā tas ir pretējs regulārai grep komandai.

8. grep -l

Tajā ir uzskaitīti visi faili, kuros ir vismaz viens piegādātā raksta gadījums. Tas ir noderīgi, ja meklējat modeli direktorijā ar vairākiem failiem. Tas drukā tikai faila nosaukumu, nevis konkrēto līniju ar modeli.

9. Viena vārda opcija -w

$ grep -w fileNames

Karogs -w liek grep meklēt norādīto modeli kā veselu vārdu, nevis tikai līnijas apakšvirsrakstu. Piemēram, iepriekš mēs pievērsāmies IP adresei un modelim inet iespiestas līnijas ar abiem inet un inet6 uzskaitot gan IPv4, gan IPv6 adreses. Bet, ja mēs izmantotu -w karogu, izmantojiet tikai līnijas ar inet tā kā vārds, pirms kura un pēc kura ir atstarpes, ir derīga atbilstība.

10. Paplašinātā regulārā izteiksme

Jūs bieži atklāsiet, ka Grep vietējie izteicieni ir mazliet ierobežojoši. Lielākajā daļā skriptu un instrukciju jūs atradīsit -E karoga izmantošanu, un tas ļaus jums ievadīt modeli tā sauktajā paplašinātajā režīmā.

Šeit ir komandas grep un grep -E, lai meklētu vārdus Supermens un Zirnekļcilvēks.

$ grep "\ (Super | Spider \) man" teksts
$ grep -E "(Super | Spider) man" teksts

Kā redzat, paplašinātā versija ir daudz vieglāk lasāma.

11. Grep jūsu konteineriem

Ja jūsu resursdatorā darbojas liels konteineru kopums, varat tos sagrābt pēc attēla nosaukuma, statusa, pakļautajiem portiem un daudziem citiem atribūtiem. Piemēram,

$ dokers ps | grep [imageName]

12. Grep par savām pākstīm

Kamēr mēs esam par konteineru tēmu. Kubernetes ar noteiktu izvietojumu bieži mēdz palaist vairākas pākstis. Lai gan katrai pākstij ir unikāls nosaukums, noteiktā vārdu telpā tie parasti sākas ar izvietošanas nosaukumu. Mēs varam to paņemt un uzskaitīt visas ar konkrēto izvietošanu saistītās pākstis.

$ kubectl iegūst pākstis | grep

13. Grep par lielajiem datiem

Bieži vien tā dēvētā “lielo datu” analīze ietver vienkāršu modeļu meklēšanu, šķirošanu un skaitīšanu noteiktā datu kopā. Īpaši labi šajā ziņā darbojas zema līmeņa UNIX utilītas, piemēram, grep, uniq, wc. Šis emuāra ziņa parāda jauku piemēru par uzdevumu, kas paveikts tikai dažu sekunžu laikā, izmantojot grep un citas Unix utilītas, kamēr Hadoop prasīja gandrīz pusstundu.

Piemēram, tas datu kopa ir vairāk nekā 1.7 GB liels. Tajā ir informācija par daudzām šaha spēlēm, ieskaitot izdarītos gājienus, uzvarētājus utt. Mūs interesē tikai rezultāti, tāpēc mēs izpildām šādu komandu:

$ grep "Rezultāts" millionbase-2.22.pgn | kārtot | uniq -c
221 [Rezultāts "*"]
653728 [rezultāts "0-1"]
852305 [rezultāts "1-0"]
690934 [Rezultāts "1 / 2-1 / 2"]

4 gadus vecam 2 kodolu / 4 pavedienu procesoram tas prasīja apmēram 15 sekundes. Tāpēc nākamreiz, kad risināsiet “lielo datu” problēmu. Padomājiet, vai tā vietā varat izmantot grep.

14. grep -color = auto

Šī opcija ļauj grep izcelt modeli tās līnijas iekšpusē, kurā tā tika atrasta.

15. grep -i

Grep modeļu saskaņošana pēc būtības ir reģistrjutīga. Bet, ja tas jums ir vienalga, tad, izmantojot -i karodziņu, grep burti kļūs nejutīgi.

16. grep -n

Karodziņā -n tiks parādīti līniju numuri, tāpēc jums nav jāuztraucas vēlāk atrast to pašu līniju.

17. git grep

Git, versiju kontroles sistēmai, jau ir iebūvēta komanda grep, kas darbojas diezgan līdzīgi jūsu parastajam grep. Bet to var izmantot, lai meklētu modeļus uz jebkura saistītā koka, izmantojot garīgo caurules, nevis vietējo git CLI. Piemēram, ja atrodaties repo galvenajā filiālē, varat paņemt visu repo, izmantojot:

(meistars) $ git grep

18. grep -o

Karogs -o patiešām ir noderīgs, kad mēģināt atkļūdot regex. Tas drukās tikai atbilstošo līnijas daļu, nevis visu līniju. Tātad, gadījumā, ja piegādātajam paraugam rodas pārāk daudz nevēlamu līniju, un jūs nevarat saprast, kāpēc tas notiek. Varat izmantot karodziņu -o, lai no turienes izdrukātu aizvainojošo apakšvirsrakstu un iemeslu par savu regex.

19. grep -x

Karodziņš -x drukātu līniju tikai tad, ja visa līnija atbilst jūsu sniegtajam regulārajam izteicienam. Tas ir nedaudz līdzīgs karogam -w, kas drukāja līniju, ja tikai vesels vārds sakrita ar piegādāto regex.

20. grep -T

Risinot žurnālus un izejas no čaulas skriptiem, jums, visticamāk, nāksies sastapties ar cietām cilnēm, lai atšķirtu dažādas izejas kolonnas. Karodziņš -T glīti izlīdzinās šīs cilnes, lai kolonnas būtu kārtīgi sakārtotas, padarot izvadi cilvēku lasāmu.

21. grep -q

Tas nomāc izvadi un klusi palaiž komandu grep. Ļoti noderīgi, aizstājot tekstu vai palaižot grep dēmonu skriptā.

22. grep -P

Cilvēki, kuri ir pieraduši izmantot regulārās izteiksmes sintaksi, var izmantot karodziņu -P, lai tieši to izmantotu. Jums nav jāapgūst regulārā izteiksme, kuru grep izmanto pēc noklusējuma.

23. grep-D [DARBĪBA]

Programmā Unix gandrīz visu var uzskatīt par failu. Līdz ar to jebkuru ierīci, kontaktligzdu vai FIFO datu plūsmu var ievadīt grep. Varat izmantot karodziņu -D, kam seko ACTION (noklusējuma darbība ir READ). Dažas citas iespējas ir SKIP, lai klusi izlaistu noteiktas ierīces, un RECURSE, lai rekursīvi apmeklētu direktorijus un saites.

24. Atkārtojums

Ja meklējat doto modeli, kas ir zināma vienkāršāka modeļa atkārtošanās, tad izmantojiet cirtainās lencītes, lai norādītu atkārtošanās skaitu

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

Tas izdrukā līnijas, kas satur 10 vai vairāk ciparus garas virknes.

25. Atkārtošanās stenogrammas

Dažas īpašās rakstzīmes ir rezervētas noteikta veida modeļa atkārtošanai. Cirtaino bikšturu vietā varat tos izmantot, ja tie atbilst jūsu vajadzībām.

? : Rakstam pirms jautājuma zīmes jāatbilst nullei vai vienai reizei.

*: Rakstam, kas atrodas pirms zvaigznes, jāatbilst nullei vai vairāk reizes.

+ : Rakstam, kas ir pirms plus, jāatbilst vienai vai vairākām reizēm.

25. Baitu nobīdes

Ja vēlaties uzzināt to baitu nobīdi, kurās atrodama atbilstošā izteiksme, varat arī izmantot karodziņu -b, lai izdrukātu nobīdes. Lai izdrukātu tikai atbilstošās līnijas daļas nobīdi, varat izmantot karodziņu -b ar karodziņu -o.

$ grep -b -o [faila nosaukums]

Nobīde vienkārši nozīmē, pēc cik baitu no faila sākuma sākas atbilstošā virkne.

26. egrep, fgrep un rgerp

Jūs bieži redzēsiet egrep izsaukumu, lai izmantotu paplašināto regulārās izteiksmes sintaksi, par kuru mēs runājām iepriekš. Tomēr šī ir novecojusi sintakse, un ieteicams to neizmantot. Tā vietā izmantojiet grep -E. Līdzīgi izmantojiet grep -F, nevis fgrep, un grep -r, nevis rgrep.

27. grep -z

Dažreiz ievade grep nav rindas, kas beidzas ar jauna līnijas rakstzīmi. Piemēram, ja apstrādājat failu nosaukumu sarakstu, tie, iespējams, nāk no dažādiem avotiem. -Z karogs liek grepam NULL rakstzīmi uzskatīt par līnijas beigām. Tas ļauj apstrādāt ienākošo straumi kā jebkuru parastu teksta failu.

28. grep -a [faila nosaukums]

Karogs -a norāda grep rīkoties ar piegādāto failu tā, it kā tas būtu parasts teksts. Fails varētu būt binārs, taču grep apstrādās iekšējo saturu tā, it kā tas būtu teksts.

29. grep -U [faila nosaukums]

-U karodziņš liek grep izturēties pret piegādātajiem failiem tā, it kā tie būtu bināri faili, nevis teksts. Pēc noklusējuma grep uzmin faila tipu, aplūkojot dažus pirmos baitus. Izmantojot šo karodziņu, tiek pārspēti minējumi.

30. grep -m NUM

Izmantojot lielus failus, izteiksmes sagrābšana var aizņemt uz visiem laikiem. Tomēr, ja vēlaties pārbaudīt tikai pirmos NUM atbilstību numurus, varat to izmantot -m karodziņu. Tas ir ātrāks, un izvadi bieži var arī pārvaldīt.

Secinājums

Liela daļa sisadministra ikdienas darba ir saistīta ar lielu tekstu sietu. Tie var būt drošības žurnāli, žurnāli no jūsu tīmekļa vai pasta servera, lietotāja darbības vai pat liels manu lapu teksts. Grep dod jums papildu elastību, rīkojoties ar šiem lietošanas gadījumiem.

Cerams, ka iepriekš minētie daži piemēri un izmantošanas gadījumi ir palīdzējuši jums labāk izprast šo programmatūras dzīvo fosiliju.

SuperTuxKart operētājsistēmai Linux
SuperTuxKart ir lielisks nosaukums, kas paredzēts, lai sniegtu jums Mario Kart pieredzi bez maksas jūsu Linux sistēmā. Tas ir diezgan izaicinoši un ja...
Cīņa par Vesnota apmācību
Cīņa par Vesnotu ir viena no populārākajām atvērtā koda stratēģijas spēlēm, kuru jūs varat spēlēt šajā laikā. Šī spēle ir izstrādāta ne tikai ļoti ilg...
0 A.D. Apmācība
No daudzajām stratēģijas spēlēm 0 A.D. izdodas izcelties kā visaptverošs nosaukums un ļoti dziļa, taktiska spēle, neskatoties uz to, ka tā ir atvērtā ...