grep

30 Grep-eksempler

30 Grep-eksempler
Du kan finde grep til stede dybt inde i dyrehjernen i Unix og Unix-lignende operativsystemer. Det er et grundlæggende program, der bruges til mønstermatchning, og det blev skrevet i 70'erne sammen med resten af ​​UNIX-værktøjet, som vi kender og elsker (eller hader).

Mens det at lære om formelle sprog og regelmæssige udtryk er et spændende emne. At lære grep har meget mere at gøre end regexer. For at komme i gang med det og for at se skønhed og elegance ved grep skal du først se nogle eksempler fra den virkelige verden.

Eksempler, der er praktiske og gør dit liv lidt lettere. Her er 30 sådanne grep almindelige brugssager og muligheder.

1. ps aux | grep

PS aux viser alle processer og deres tilknyttede pids. Men ofte er denne liste for lang til, at et menneske kan inspicere. Piping af output til en grep-kommando, du kan liste processer, der kører med et meget specifikt program i tankerne. For eksempel kunne være sshd eller nginx eller httpd.

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

2. Gribende dine IP-adresser

I de fleste operativsystemer kan du liste alle dine netværksgrænseflader og den IP, der er tildelt grænsefladen ved hjælp af enten kommandoen ifconfig eller ip addr. Begge disse kommandoer udsender en masse yderligere information. Men hvis du kun vil udskrive IP-adressen (sig for shell-scripts), kan du bruge kommandoen nedenfor:

$ ip addr | grep inet | awk 'udskriv $ 2; '
$ ip addr | grep -w inet | awk 'udskriv $ 2; '# For linjer med bare inet ikke inet6 (IPv6)

IP addr-kommandoen får alle detaljerne (inklusive IP-adresser), den ledes derefter til den anden kommando grep inet, som kun outputter linjerne med inet i dem. Dette føres derefter i awk-udskrivning af udsagnet, der udskriver det andet ord i hver linje (for at sige det enkelt).

P.S: Du kan også gøre dette uden grep, hvis du kender det godt ved det.

3. Ser man på mislykkede SSH-forsøg

Hvis du har en internetadgangsserver med en offentlig IP, bliver den konstant bombarderet med SSH-forsøg, og hvis du tillader brugere at have adgangskodebaseret SSH-adgang (en politik, som jeg ikke vil anbefale) kan du se alle sådanne mislykkede forsøg ved hjælp af følgende grep-kommando:

# cat / var / log / auth.log | grep “Fail”
Prøve på put
5. dec 16:20:03 debian sshd [509]: Mislykket adgangskode til root fra 192.168.0.100 port 52374 ssh2
5. dec 16:20:07 debian sshd [509]: Mislykket adgangskode til root fra 192.168.0.100 port 52374 ssh2
5. dec 16:20:11 debian sshd [509]: Mislykket adgangskode til root fra 192.168.0.100 port 52374 ssh2

4. Piping Grep til Uniq

Nogle gange vil grep sende en masse information. I ovenstående eksempel kan en enkelt IP have forsøgt at komme ind i dit system. I de fleste tilfælde er der kun en håndfuld sådanne krænkende IP'er, som du har brug for til entydigt at identificere og sortliste.

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

Uniq-kommandoen skal kun udskrive de unikke linjer. Uniq -f 3 springer over de første tre felter (for at overse tidsstemplerne, som aldrig gentages) og begynder derefter at lede efter unikke linjer.

5. Grepper efter fejlmeddelelser

Brug af Grep til adgangs- og fejllogfiler er ikke begrænset til kun SSH. Webservere (som Nginx) logger fejl og får adgang til logfiler ganske omhyggeligt. Hvis du opretter overvågningsscript, der sender dig alarmer, når grep “404” returnerer en ny værdi. Det kan være ret nyttigt.

# grep -w "404" / var / www / nginx / adgang.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, ligesom 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 som Mac OS X)
AppleWebKit / 605.1.15 (KHTML, som Gecko) Version / 12.0 Mobil / 15E148 Safari / 604.1 "

Regex er muligvis ikke "404", men nogle andre regex-filtrering til kun mobile klienter eller kun Apple-enheder, der ser en webside. Dette giver dig mulighed for at få en dybere indsigt i, hvordan din app klarer sig.

6. Pakkeoversigt

For Debian-baserede systemer viser dpkg -l alle de pakker, der er installeret på dit system. Du kan pibe det i en grep-kommando for at lede efter pakker, der tilhører en bestemt applikation. For eksempel:

# dpkg -l | grep "vim"

7. grep -v filnavne

For at liste alle de linjer, som gør det ikke indeholder et givet mønster, brug flag -v. Det er dybest set det modsatte af en almindelig grep-kommando.

8. grep -l

Den viser alle de filer, der indeholder mindst en forekomst af det medfølgende mønster. Dette er nyttigt, når du søger efter et mønster i en mappe med flere filer. Det udskriver kun filnavnet og ikke den specifikke linje med mønsteret.

9. Enkelt ord valgmulighed -w

$ grep -w filnavne

Flagget -w fortæller grep at kigge efter det givne mønster som et helt ord og ikke kun en strækning af en linje. For eksempel greppede vi tidligere IP-adresse og mønsteret inet trykte linjerne med begge inet og inet6 der viser både IPv4- og IPv6-adresser. Men hvis vi brugte -w, markerer kun linjerne med inet som et ord forud for og efterfulgt af hvide mellemrum er et gyldigt match.

10. Udvidet regulært udtryk

Du vil ofte opdage, at de regulære udtryk, der er hjemmehørende i Grep, er lidt begrænsende. I de fleste scripts og instruktioner finder du brugen af ​​-E-flag, og dette giver dig mulighed for at indtaste mønster i det, der kaldes udvidet tilstand.

Her er grep og grep -E kommandoerne for at lede efter ord Superman og Spiderman.

$ grep "\ (Super | Spider \) mand" tekst
$ grep -E "(Super | Spider) mand" tekst

Som du kan se, er den udvidede version meget lettere at læse.

11. Grep for dine containere

Hvis du har en stor klynge af containere, der kører på din vært, kan du gribe dem efter billednavn, status, porte, de udsætter, og mange andre attributter. For eksempel,

$ docker ps | grep [billednavn]

12. Grep for dine bælg

Mens vi er om emnet containere. Kubernetes har ofte en tendens til at lancere flere bælg under en given implementering. Mens hver pod har et unikt navn, i et givet navneområde, starter de typisk med implementeringsnavnet. Vi kan forstå det og liste alle bælgene, der er knyttet til en given implementering.

$ kubectl få bælg | grep

13. Grep for store data

Ofte involverer den såkaldte "Big Data" -analyse simpel søgning, sortering og optælling af mønstre i et givet datasæt. UNIX-værktøjer på lavt niveau som grep, uniq, wc er især gode til dette. Det her blogindlæg viser et godt eksempel på en opgave, der er udført på få sekunder ved hjælp af grep og andre Unix-værktøjer, mens Hadoop tog næsten en halv time.

For eksempel dette datasæt er over 1.7 GB i størrelse. Den indeholder information om et væld af skakkampe, herunder de bevægelser, der er foretaget, hvem der vandt osv. Vi er interesserede i bare resultater, så vi kører følgende kommando:

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

Dette tog cirka 15 sekunder på en 4 år gammel 2-kerner / 4-trådsprocessor. Så næste gang du løser et "big data" -problem. Tænk, om du kan bruge grep i stedet.

14. grep -farve = auto

Denne mulighed lader grep fremhæve mønsteret inde i den linje, hvor det blev fundet.

15. grep -i

Grep-mønstertilpasning er i sagens natur store og små og store. Men hvis du ikke er ligeglad med det, vil brugen af ​​-i-flaget gøre grep store og små bogstaver.

16. grep -n

Flagget -n viser linjenumrene, så du ikke behøver at bekymre dig om at finde den samme linje senere.

17. git grep

Git, versionskontrolsystemet, har selv en indbygget grep-kommando, der fungerer stort set som din almindelige grep. Men det kan bruges til at søge efter mønstre på ethvert engageret træ ved hjælp af den indfødte git CLI i stedet for kedelige rør. For eksempel, hvis du er i mestergrenen for din repo, kan du grep over repoen ved hjælp af:

(master) $ git grep

18. grep -o

Flagget -o er virkelig nyttigt, når du prøver at debugge en regex. Den udskriver kun den matchende del af linjen i stedet for hele linjen. Så hvis du får for mange uønskede linjer til et leveret mønster, og du kan ikke forstå, hvorfor det sker. Du kan bruge -o-flaget til at udskrive det fornærmende underlag og begrunde din regex bagud derfra.

19. grep -x

Flagget -x vil udskrive en linje, hvis og kun hvis hele linjen matcher dit leverede regex. Dette svarer noget til -w-flag, der udskrev en linje, hvis og kun af et helt ord matchede den medfølgende regex.

20. grep -T

Når du beskæftiger dig med logfiler og output fra en shell-scripts, er du mere end sandsynligt at støde på hårde faner for at skelne mellem forskellige kolonner for output. Flagget -T vil justere disse faner pænt, så kolonnerne er pænt arrangeret, hvilket gør output menneskeligt læsbart.

21. grep -q

Dette undertrykker output og kører stille grep-kommandoen. Meget nyttigt, når du udskifter tekst eller kører grep i et dæmonscript.

22. grep -P

Folk, der er vant til at perl regulær udtrykssyntaks, kan bruge -P-flaget til at bruge netop det. Du behøver ikke lære grundlæggende regulært udtryk, som grep bruger som standard.

23. grep -D [HANDLING]

I Unix kan næsten alt behandles som en fil. Derfor kan enhver enhed, et stik eller en FIFO-datastrøm føres til grep. Du kan bruge -D-flag efterfulgt af en HANDLING (standardhandlingen er LÆS). Et par andre muligheder er SKIP for lydløst at springe over specifikke enheder og RECURSE for rekursivt at gå gennem mapper og symlinks.

24. Gentagelse

Hvis du leder efter et givet mønster, som er en gentagelse af et kendt enklere mønster, skal du bruge krøllede seler til at angive antallet af gentagelser

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

Dette udskriver linjer, der indeholder strengene på 10 eller flere cifre.

25. Gentagelse stenografi

Nogle specialtegn er reserveret til en bestemt form for gentagelse af mønstre. Du kan bruge disse i stedet for krøllede seler, hvis de passer til dit behov.

? : Mønsteret foran spørgsmålstegnet skal matche nul eller en gang.

*: Mønsteret forud for stjerne skal matche nul eller flere gange.

+ : Mønsteret forud for plus skal matche en eller flere gange.

25. Byte forskydninger

Hvis du vil vide, se byteforskydningen af ​​de linjer, hvor det matchende udtryk findes, kan du også bruge flaget -b til at udskrive forskydningerne. For at udskrive forskydningen af ​​bare den matchende del af en linje kan du bruge -b flag med -o flag.

$ grep -b -o [filnavn]

Offset betyder simpelthen, hvor mange byte fra begyndelsen af ​​filen starter den matchende streng.

26. egrep, fgrep og rgerp

Du vil ofte se påkaldelsen af ​​egrep for at bruge den udvidede syntaks for regulært udtryk, vi diskuterede tidligere. Dette er imidlertid en forældet syntaks, og det anbefales, at du undgår at bruge denne. Brug grep -E i stedet. Brug ligeledes grep -F i stedet for fgrep og grep -r i stedet for rgrep.

27. grep -z

Nogle gange er input til grep ikke linjer, der slutter med en newline-karakter. For eksempel, hvis du behandler en liste med filnavne, kan de komme fra forskellige kilder. Flagget -z fortæller grep at behandle NULL-tegnet som linjeafslutningen. Dette giver dig mulighed for at behandle den indgående strøm som enhver almindelig tekstfil.

28. grep -a [filnavn]

Flagget -a fortæller grep at behandle den leverede fil som om det var almindelig tekst. Filen kan være en binær, men grep behandler indholdet inde, som om det er tekst.

29. grep -U [filnavn]

Flagget -U fortæller grep at behandle de leverede filer, som om de er binære filer og ikke tekst. Som standard gætter grep på filtypen ved at se på de første par bytes. Brug af dette flag overstyrer det gætte arbejde.

30. grep -m NUM

Med store filer kan grepping efter et udtryk tage for evigt. Men hvis du kun vil tjekke for de første NUM-numre af matches, kan du bruge -m-flag til at opnå dette. Det er hurtigere, og output er ofte også håndterbart.

Konklusion

En masse dagligdags job med et sysadmin indebærer sigtning gennem store tekstskår. Disse kan være sikkerhedslogfiler, logfiler fra din web- eller mailserver, brugeraktivitet eller endda stor tekst på mandsider. Grep giver dig den ekstra smule fleksibilitet, når du håndterer disse brugssager.

Forhåbentlig har ovenstående få eksempler og brugssager hjulpet dig med bedre at forstå dette levende fossil af en software.

Mus Styr og administrer musebevægelse mellem flere skærme i Windows 10
Styr og administrer musebevægelse mellem flere skærme i Windows 10
Dual Display Mouse Manager lader dig kontrollere og konfigurere musebevægelse mellem flere skærme ved at bremse dens bevægelser nær grænsen. Windows 1...
Mus WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
Hvis du vil forbedre standardfunktionerne for din musemarkør, skal du bruge freeware WinMouse. Det tilføjer flere funktioner, der hjælper dig med at f...
Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...