grep

30 Grep pavyzdžių

30 Grep pavyzdžių
Galite rasti „grep“, esantį giliai „Unix“ ir į „Unix“ panašių operacinių sistemų gyvūnų smegenyse. Tai yra pagrindinė programa, naudojama modelių derinimui. Ji buvo parašyta 70-aisiais kartu su likusia UNIX priemone, kurią mes žinome ir mėgstame (arba nekenčiame).

Nors mokymasis apie oficialias kalbas ir įprastas išraiškas yra įdomi tema. Mokymasis grep turi daug daugiau nei regexes. Norėdami pradėti nuo jo ir pamatyti grep grožį bei eleganciją, pirmiausia turite pamatyti keletą realaus pasaulio pavyzdžių.

Patogūs ir jūsų gyvenimą šiek tiek palengvinantys pavyzdžiai. Štai 30 tokių „grep“ įprasto naudojimo atvejų ir parinkčių.

1. ps aux | grep

„Ps aux“ pateikia visus procesus ir su jais susijusius pidus. Tačiau dažnai šis sąrašas yra per ilgas, kad žmogus galėtų jį patikrinti. Pateikdami išvestį į „grep“ komandą, galite išvardyti procesus, vykstančius turint omenyje labai konkrečią programą. Pavyzdžiui gali būti sshd arba nginx arba httpd.

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

2. Grepping jūsų IP adresus

Daugumoje operacinių sistemų galite išvardyti visas savo tinklo sąsajas ir IP, priskirtą tai sąsajai, naudodami komandą ifconfig arba ip addr. Abi šios komandos pateiks daug papildomos informacijos. Bet jei norite atsispausdinti tik IP adresą (tarkim, „shell“ scenarijus), galite naudoti toliau pateiktą komandą:

$ ip addr | grep inet | awk 'spausdinti 2 USD;
$ ip addr | grep -w inet | awk 'spausdinti 2 USD; '# Linijoms, kuriose yra tiesiog inet, o ne inet6 (IPv6)

Komanda „ip addr“ gauna visą informaciją (įskaitant IP adresus), tada ji perduodama į antrąją komandą „grep inet“, kuri išleidžia tik tas eilutes, kuriose yra inet. Tada tai yra įtraukiama į awk spausdinti teiginį, kuriame atspausdinamas antrasis žodis kiekvienoje eilutėje (paprasčiau tariant).

P.S: Taip pat galite tai padaryti be grep, jei žinote, kad awk gerai žino.

3. Žvelgiant į nepavykusius SSH bandymus

Jei turite interneto ryšiui pritaikytą serverį su viešu IP, jis bus nuolat bombarduojamas bandant SSH ir jei leisite vartotojams turėti slaptažodžiu pagrįstą SSH prieigą (politika, kurios nerekomenduočiau), visus tokius nepavykusius bandymus galite pamatyti naudodamiesi ši grep komanda:

# cat / var / log / auth.žurnalas | grep „nepavykti“
Mėginys išleisti
Gruodžio 5 d. 16:20:03 debian sshd [509]: Nepavyko gauti slaptažodžio root nuo 192.168.0.100 uostas 52374 ssh2
Gruodžio 5 d. 16:20:07 debian sshd [509]: Nepavyko nustatyti root root slaptažodžio nuo 192.168.0.100 uostas 52374 ssh2
Gruodžio 5 d. 16:20:11 debian sshd [509]: Nepavyko gauti slaptažodžio root nuo 192.168.0.100 uostas 52374 ssh2

4. „Grep“ išvedimas į „Uniq“

Kartais „grep“ pateikia daug informacijos. Ankstesniame pavyzdyje vienas IP galėjo bandyti įvesti jūsų sistemą. Daugeliu atvejų yra tik keletas tokių pažeidžiančių IP, kuriuos reikia unikaliai identifikuoti ir įtraukti į juodąjį sąrašą.

# cat / var / log / auth.žurnalas | grep "Nepavyko" uniq -f 3

Manoma, kad komanda „uniq“ atspausdins tik unikalias eilutes. „Uniq -f 3“ praleidžia pirmuosius tris laukus (kad nepastebėtų laiko žymių, kurios niekada nebekartojasi) ir tada pradeda ieškoti unikalių eilučių.

5. Grepping už klaidų pranešimus

„Grep“ naudojimas prieigai ir klaidų žurnalams neapsiriboja tik SSH. Žiniatinklio serverių (pvz., „Nginx“) klaidos ir prieigos žurnalai registruojami gana kruopščiai. Jei nustatysite stebėjimo scenarijus, kurie jums siunčia įspėjimus, kai grep „404“ grąžina naują vertę. Tai gali būti gana naudinga.

# grep -w "404" / var / www / nginx / prieiga.žurnalas
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, kaip ir 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 kaip „Mac OS X“)
„AppleWebKit“ / 605.1.15 (KHTML, kaip ir Gecko) versija / 12.0 „Mobile“ / 15E148 „Safari“ / 604.1 "

Regeksas gali būti ne „404“, bet kai kurie kiti regex filtrai, skirti tik mobiliesiems klientams arba tik „Apple“ įrenginiams, žiūrintiems tinklalapį. Tai leidžia jums išsamiau sužinoti, kaip veikia jūsų programa.

6. Pakuočių sąrašas

Debian sistemose dpkg -l išvardijami visi jūsų sistemoje įdiegti paketai. Galite įvesti tai į komandą „grep“, norėdami ieškoti paketų, priklausančių konkrečiai programai. Pavyzdžiui:

# dpkg -l | grep "vim"

7. grep -v fileNames

Norėdami išvardyti visas eilutes, kurios nereikia yra duotas šablonas, naudokite vėliavą -v. Iš esmės tai priešinga įprastai grep komandai.

8. grep -l

Jame išvardyti visi failai, kuriuose yra bent vienas pateikto modelio atvejis. Tai naudinga, kai ieškote šablono kataloge su keliais failais. Spausdina tik failo pavadinimą, o ne konkrečią eilutę su šablonu.

9. Vieno žodžio parinktis -w

$ grep -w fileNames

„-W“ vėliava liepia „grep“ ieškoti nurodyto modelio kaip viso žodžio, o ne tik eilutės pakraščio. Pavyzdžiui, anksčiau mes paėmėme IP adresą ir modelį inet atspausdino eiles abiem inet ir inet6 išvardijant IPv4 ir IPv6 adresus. Bet jei mes naudojome -w, pažymėkite tik linijas su inet kaip žodis, prieš kurį ir po kurio yra tarpai, yra tinkamas atitikmuo.

10. Išplėstinė reguliarioji išraiška

Dažnai pastebėsite, kad reguliarūs posakiai, kurių gimtoji kalba yra Grep, šiek tiek riboja. Daugumoje scenarijų ir instrukcijų rasite -E vėliavą ir tai leis jums įvesti šabloną vadinamajame išplėstiniame režime.

Štai „grep“ ir „grep -E“ komandos, ieškančios žodžių „Supermenas“ ir „Žmogus-voras“.

$ grep "\ (Super | Voras \) žmogus" tekstas
$ grep -E "(Super | Spider) man" tekstas

Kaip matote, išplėstinę versiją yra daug lengviau skaityti.

11. Grep už savo konteinerius

Jei pagrindiniame kompiuteryje veikia didelis sudėtinių rodinių konteineris, galite juos paimti pagal paveikslėlio pavadinimą, būseną, jų rodomus prievadus ir daugelį kitų atributų. Pavyzdžiui,

$ docker ps | grep [imageName]

12. Grep savo ankštimis

Kol esame konteinerių tema. „Kubernetes“ dažnai linkę paleisti kelias dėžutes pagal tam tikrą dislokavimą. Nors kiekvienas podas turi unikalų pavadinimą, tam tikroje vardų srityje jie paprastai prasideda diegimo pavadinimu. Mes galime tai pažiūrėti ir išvardyti visas su tam tikru diegimu susijusias dėžutes.

$ kubectl gauti ankštys | grep

13. „Grep“ už didelius duomenis

Dažnai vadinamoji „didelių duomenų“ analizė apima paprastą tam tikro duomenų rinkinio modelių paiešką, rūšiavimą ir skaičiavimą. Žemo lygio UNIX programos, tokios kaip grep, uniq, wc, yra ypač geros. Tai tinklaraščio straipsnis rodo gražų užduoties, atliktos per kelias sekundes, naudojant „grep“ ir kitas „Unix“ paslaugas, pavyzdį, o Hadoopas užtruko beveik pusvalandį.

Pavyzdžiui, tai duomenų rinkinys yra daugiau nei 1.7 GB dydžio. Jame pateikiama informacija apie daugybę šachmatų rungtynių, įskaitant atliktus ėjimus, kas laimėjo ir kt. Mus domina tik rezultatai, todėl vykdome šią komandą:

$ grep „Rezultatas“ milijoninė bazė-2.22.pgn | rūšiuoti | uniq -c
221 [Rezultatas "*"]
653728 [rezultatas "0-1"]
852305 [rezultatas "1-0"]
690934 [rezultatas "1 / 2-1 / 2"]

Tai užtruko maždaug 15 sekundžių naudojant 4 metų senumo 2 branduolių / 4 gijų procesorių. Taigi kitą kartą spręsdami „didelių duomenų“ problemą. Pagalvokite, ar vietoj to galite naudoti „grep“.

14. grep -color = auto

Ši parinktis leidžia grep paryškinti raštą toje eilutėje, kurioje jis buvo rastas.

15. grep -i

„Grep“ modelio atitikimas iš esmės skiriasi nuo didžiųjų ir mažųjų raidžių. Bet jei jums tai nerūpi, naudodamiesi „-i“ vėliava, „grep“ raidės bus nejautrios.

16. grep -n

„-N“ vėliava parodys eilučių numerius, todėl jums nereikės jaudintis vėliau radus tą pačią eilutę.

17. git grep

„Git“, versijų valdymo sistema, turi įmontuotą „grep“ komandą, kuri veikia panašiai kaip jūsų įprastas „grep“. Tačiau jį galima naudoti ieškant bet kokio medžio modelių naudojant vietinį git CLI, o ne varginančius vamzdžius. Pvz., Jei esate pagrindiniame savo atpirkimo filiale, galite peršokti per atpirkimą naudodami:

(meistras) $ git grep

18. grep -o

„-O“ vėliava yra tikrai naudinga, kai bandote derinti regex. Jis atspausdins tik atitinkamą eilutės dalį, o ne visą eilutę. Taigi, jei gaunate per daug nepageidaujamos linijos pagal pateiktą modelį, ir jūs negalite suprasti, kodėl taip vyksta. Galite naudoti žymę -o, kad atspausdintumėte pažeidžiančią eilutę ir priežastis, kodėl jūsų regexas yra atgal.

19. grep -x

„-X“ vėliava atspausdins eilutę, jei ir tik tada, jei visa eilutė atitinka jūsų pateiktą regex. Tai šiek tiek panašu į „-w“ vėliavą, kuri atspausdino eilutę, jei ir tik visas žodis atitiko pateiktą regex.

20. grep -T

Tvarkydami žurnalus ir išvestis iš „shell“ scenarijų, daugiau nei tikėtina, kad susidursite su skirtukais, kad būtų galima atskirti skirtingus išvesties stulpelius. „-T“ vėliava gražiai sulygins šiuos skirtukus, kad stulpeliai būtų tvarkingai išdėstyti, todėl išvestis būtų žmonėms suprantama.

21. grep -q

Tai slopina išvestį ir tyliai paleidžia komandą grep. Labai naudinga pakeičiant tekstą arba vykdant „grep“ „daemon“ scenarijuje.

22. grep -P

Žmonės, įpratę prie perl reguliarios išraiškos sintaksės, gali naudoti žymeklį -P, kad tiksliai tai panaudotų. Jums nereikia mokytis pagrindinės reguliariosios išraiškos, kurią grep naudoja pagal numatytuosius nustatymus.

23. grep -D [VEIKSMAS]

„Unix“ programoje beveik viskas gali būti traktuojama kaip failas. Vadinasi, bet kuris įrenginys, lizdas ar FIFO duomenų srautas gali būti tiekiami grep. Galite naudoti žymeklį -D, po kurio seka ACTION (numatytasis veiksmas yra SKAITYTI). Keletas kitų variantų yra SKIP, jei norite tyliai praleisti konkrečius įrenginius, ir RECURSE, kad rekursiškai pereitumėte katalogus ir nuorodas.

24. Pakartojimas

Jei ieškote nurodyto modelio, kuris yra žinomo paprastesnio modelio pakartojimas, tada naudokite garbanotas petnešas, kad nurodytumėte pasikartojimo skaičių

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

Tai spausdina eilutes, kuriose yra 10 ar daugiau skaitmenų ilgių eilutės.

25. Pasikartojantys trumpiniai

Kai kurie specialieji simboliai yra skirti tam tikram modelio kartojimui. Galite naudoti juos vietoj garbanotų petnešų, jei jie tinka jūsų poreikiams.

? : Šablonas prieš klaustuką turi atitikti nulį arba vieną kartą.

*: Šablonas prieš žvaigždę turi sutapti su nuliu ar daugiau kartų.

+ : Šablonas, einantis prieš pliusą, turi sutapti vieną ar kelis kartus.

25. Baitų kompensavimas

Jei norite sužinoti eilučių, kuriose randama atitinkanti išraiška, baitų poslinkį, taip pat galite naudoti žymeklį -b atspausdinti poslinkius. Norėdami atspausdinti tik atitinkančios eilutės dalies poslinkį, galite naudoti -b vėliavą su -o vėliava.

$ grep -b -o [failo pavadinimas]

Poslinkis reiškia tiesiog po to, kiek baitų nuo failo pradžios prasideda atitinkama eilutė.

26. egrep, fgrep ir rgerp

Dažnai pamatysite egrep iškvietimą, norėdami naudoti išplėstinę reguliariosios išraiškos sintaksę, apie kurią kalbėjome anksčiau. Tačiau tai nebenaudojama sintaksė ir rekomenduojama vengti jos naudoti. Vietoj to naudokite grep -E. Panašiai naudokite grep -F vietoj fgrep ir grep -r vietoj rgrep.

27. grep -z

Kartais įvestis „grep“ nėra eilutės, besibaigiančios naujos eilutės simboliu. Pvz., Jei apdorojate failų pavadinimų sąrašą, jie gali būti iš skirtingų šaltinių. -Z vėliava nurodo grep, kad NULL simbolis būtų traktuojamas kaip eilutės pabaiga. Tai leidžia jums laikyti gaunamą srautą kaip bet kokį įprastą tekstinį failą.

28. grep -a [failo pavadinimas]

-A vėliava nurodo „grep“ apdoroti pateiktą failą taip, lyg tai būtų įprastas tekstas. Failas gali būti dvejetainis, tačiau „grep“ traktuos viduje esantį turinį, tarsi tekstą.

29. grep -U [failo pavadinimas]

-U vėliava nurodo grep elgtis su pateiktais failais taip, tarsi jie būtų dvejetainiai failai, o ne tekstas. Pagal numatytuosius nustatymus grep spėja failo tipą, žiūrėdamas į pirmuosius baitus. Šios žymos naudojimas panaikina spėjimą.

30. grep -m NUM

Turint didelius failus, griebtis išraiškos gali užtrukti amžinai. Tačiau jei norite patikrinti tik pirmuosius NUM atitikmenų skaičius, galite tai padaryti naudodami žymeklį -m. Tai greitesnė, o išvestį taip pat dažnai galima valdyti.

Išvada

Daugybė kasdienio „sysadmino“ darbo yra persijoti didelius teksto sluoksnius. Tai gali būti saugos žurnalai, žurnalai iš jūsų žiniatinklio ar pašto serverio, vartotojo veikla ar net didelis žmogaus puslapių tekstas. „Grep“ suteikia jums šiek tiek lankstumo sprendžiant šiuos naudojimo atvejus.

Tikimės, kad aukščiau pateikti keli pavyzdžiai ir naudojimo atvejai padėjo jums geriau suprasti šią gyvą programinės įrangos fosiliją.

Geriausi „Linux“ žaidimų distristai 2021 m
„Linux“ operacinė sistema nuėjo ilgą kelią nuo originalios, paprastos, serverio išvaizdos. Ši OS pastaraisiais metais nepaprastai patobulėjo ir dabar ...
Kaip užfiksuoti ir perduoti savo žaidimų sesiją sistemoje „Linux“
Anksčiau žaidimai buvo laikomi tik pomėgiu, tačiau laikui bėgant lošimų pramonė labai augo technologijų ir žaidėjų skaičiaus atžvilgiu. Žaidimų audito...
Geriausi žaidimai, kuriuos reikia žaisti naudojant rankos stebėjimą
„Oculus Quest“ neseniai pristatė puikią rankos stebėjimo be valdiklių idėją. „Oculus Quest“ rankų sekimo žaidimai iki šiol buvo ribojami, kai žaidimų ...