grep

30 Grep-eksempler

30 Grep-eksempler
Du kan finne grep til stede dypt inne i dyrehjernen til Unix og Unix-lignende operativsystemer. Det er et grunnleggende program som brukes til mønstermatching, og det ble skrevet på 70-tallet sammen med resten av UNIX-verktøyet som vi kjenner og elsker (eller hater).

Mens det å lære om formelle språk og vanlige uttrykk er et spennende tema. Å lære grep har mye mer å gjøre enn regexer. For å komme i gang med det og for å se skjønnheten og elegansen til grep, må du først se noen eksempler fra den virkelige verden.

Eksempler som er nyttige og gjør livet ditt litt lettere. Her er 30 slike grep vanlige brukssaker og alternativer.

1. ps aux | grep

PS aux viser alle prosesser og tilhørende pids. Men ofte er denne listen for lang for et menneske å inspisere. Ved å koble utgangen til en grep-kommando kan du liste prosesser som kjører med et veldig spesifikt program i tankene. For eksempel kan være sshd eller nginx eller httpd.

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

2. Grepping IP-adressene dine

I de fleste operativsystemer kan du liste opp alle nettverksgrensesnittene og IP-en som er tilordnet grensesnittet ved å bruke enten kommandoen ifconfig eller ip addr. Begge disse kommandoene vil sende ut mye tilleggsinformasjon. Men hvis du bare vil skrive ut IP-adressen (si for skallskript), kan du bruke kommandoen nedenfor:

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

IP-addr-kommandoen får alle detaljene (inkludert IP-adressene), den ledes deretter til den andre kommandoen grep inet som bare sender ut linjene med inet i dem. Dette føres deretter i awk-utskrift av utsagnet som skriver ut det andre ordet i hver linje (for å si det enkelt).

P.S: Du kan også gjøre dette uten grep hvis du vet kjenner godt.

3. Ser på mislykkede SSH-forsøk

Hvis du har en server som vender mot Internett, med en offentlig IP, vil den hele tiden bli bombardert med SSH-forsøk, og hvis du tillater brukere å ha passordbasert SSH-tilgang (en policy som jeg ikke vil anbefale) kan du se alle slike mislykkede forsøk ved å bruke følgende grep-kommando:

# cat / var / log / auth.logg | grep “Mislykkes”
Prøve ut putte
5. des 16:20:03 debian sshd [509]: Mislykket passord for root fra 192.168.0.100 port 52374 ssh2
5. des 16:20:07 debian sshd [509]: Mislykket passord for root fra 192.168.0.100 port 52374 ssh2
5. des 16:20:11 debian sshd [509]: Mislykket passord for root fra 192.168.0.100 port 52374 ssh2

4. Piping Grep til Uniq

Noen ganger vil grep sende ut mye informasjon. I eksemplet ovenfor kan en enkelt IP ha forsøkt å komme inn i systemet ditt. I de fleste tilfeller er det bare en håndfull slike krenkende IP-er som du trenger for å identifisere og svarteliste unikt.

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

Uniq-kommandoen skal bare skrive ut de unike linjene. Uniq -f 3 hopper over de første tre feltene (for å overse tidsstemplene som aldri blir gjentatt) og begynner deretter å lete etter unike linjer.

5. Grepping for feilmeldinger

Bruk av Grep for tilgangs- og feillogger er ikke begrenset til bare SSH. Webservere (som Nginx) logger feil og får tilgang til loggene ganske nøye. Hvis du setter opp overvåkingsskript som sender deg varsler når grep “404” returnerer en ny verdi. Det kan være ganske nyttig.

# grep -w "404" / var / www / nginx / access.Logg
192.168.0.100 - - [06 / Des / 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, som Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Des / 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) Versjon / 12.0 Mobil / 15E148 Safari / 604.1"

Regex er kanskje ikke "404", men noen andre regex-filtreringer for bare mobile klienter eller bare Apple-enheter som ser på en webside. Dette lar deg få en dypere innsikt i hvordan appen din fungerer.

6. Pakkeoppføring

For Debian-baserte systemer viser dpkg -l alle pakkene som er installert på systemet ditt. Du kan pipe det inn i en grep-kommando for å lete etter pakker som tilhører et bestemt program. For eksempel:

# dpkg -l | grep "vim"

7. grep -v filnavn

Å liste opp alle linjene som ikke gjør det inneholder et gitt mønster, bruk flagget -v. Det er i utgangspunktet det motsatte av en vanlig grep-kommando.

8. grep -l

Den viser alle filene som inneholder minst en forekomst av det medfølgende mønsteret. Dette er nyttig når du søker etter et mønster i en katalog med flere filer. Den skriver bare ut filnavnet, og ikke den spesifikke linjen med mønsteret.

9. Alternativ for enkeltord - w

$ grep -w filnavn

Flagget -w forteller grep om å se etter det gitte mønsteret som et helt ord og ikke bare en delstreng av en linje. For eksempel grep vi tidligere etter IP-adresse og mønsteret inet skrev ut linjene med begge inet og inet6 som viser både IPv4- og IPv6-adresser. Men hvis vi brukte - flagg bare linjene med inet som et ord foran og etterfulgt av hvite mellomrom er en gyldig kamp.

10. Utvidet regulært uttrykk

Du vil ofte oppdage at de vanlige uttrykkene fra Grep er litt begrensende. I de fleste skripter og instruksjoner finner du bruken av -E flagg, og dette vil tillate deg å skrive inn mønster i det som kalles utvidet modus.

Her er grep og grep -E-kommandoene for å lete etter ord Superman og Spiderman.

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

Som du kan se er den utvidede versjonen mye lettere å lese.

11. Grep for containerne dine

Hvis du har en stor klynge med containere som kjører på verten din, kan du ta tak i dem etter bildenavn, status, porter de eksponerer og mange andre attributter. For eksempel,

$ docker ps | grep [imageName]

12. Grep for belgene

Mens vi er om emnet containere. Kubernetes pleier ofte å lansere flere pods under en gitt distribusjon. Mens hver pod har et unikt navn, i et gitt navneområde, begynner de vanligvis med distribusjonsnavnet. Vi kan ta tak i det og liste opp alle podene som er knyttet til en gitt distribusjon.

$ kubectl få pods | grep

1. 3. Grep for Big data

Ofte innebærer den såkalte "Big Data" -analysen enkel søking, sortering og telling av mønstre i et gitt datasett. UNIX-verktøy på lavt nivå som grep, uniq, wc er spesielt gode på dette. Dette blogg innlegg viser et fint eksempel på en oppgave utført på få sekunder med grep og andre Unix-verktøy mens Hadoop tok nesten en halv time.

For eksempel dette datasett er over 1.7 GB i størrelse. Den inneholder informasjon om et mangfold av sjakkamper, inkludert trekk gjort, hvem som vant osv. Vi er interessert i bare resultater, så vi kjø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 tok rundt 15 sekunder på en 4 år gammel 2-kjerner / 4-tråds prosessor. Så neste gang du løser et "big data" -problem. Tenk om du kan bruke grep i stedet.

14. grep -farge = auto

Dette alternativet lar grep markere mønsteret innenfor linjen der det ble funnet.

15. grep -i

Grep-mønstertilpasning er i sak store og små bokstaver. Men hvis du ikke bryr deg om det, vil bruk av -i-flagget gjøre grep ufølsom.

16. grep -n

Flagget -n viser linjenumrene, slik at du ikke trenger å bekymre deg for å finne den samme linjen senere.

17. git grep

Git, versjonskontrollsystemet, har i seg selv en innebygd grep-kommando som fungerer omtrent som din vanlige grep. Men det kan brukes til å søke etter mønstre på et hvilket som helst engasjert tre ved hjelp av den innfødte git CLI, i stedet for kjedelige rør. Hvis du for eksempel er i hovedgrenen til repoen din, kan du grep over repoen ved å bruke:

(master) $ git grep

18. grep -o

Flagget -o er veldig nyttig når du prøver å feilsøke en regex. Den vil bare skrive ut den matchende delen av linjen, i stedet for hele linjen. Så i tilfelle du får for mange uønskede linjer for et medfølgende mønster, og du kan ikke forstå hvorfor det skjer. Du kan bruke -o-flagget til å skrive ut det fornærmende underlaget og resonnere om regexen din bakover derfra.

19. grep -x

Flagget -x vil skrive ut en linje, hvis og bare hvis, hele linjen samsvarer med den medfølgende regexen. Dette ligner noe på -w-flagget som skrev ut en linje hvis og bare et helt ord samsvarte med den medfølgende regexen.

20. grep -T

Når du arbeider med logger og utdata fra skallskripter, er det mer sannsynlig at du støter på harde faner for å skille mellom forskjellige kolonner for utdata. Flagget -T vil justere disse kategoriene pent, slik at kolonnene er pent ordnet, noe som gjør utgangen menneskelig lesbar.

21. grep -q

Dette undertrykker utdata og kjører grep-kommandoen stille. Veldig nyttig når du bytter ut tekst, eller kjører grep i et demonskript.

22. grep -P

Folk som er vant til å synkronisere vanlig uttrykk, kan bruke -P-flagget til å bruke akkurat det. Du trenger ikke å lære deg grunnleggende regulært uttrykk, som grep bruker som standard.

23. grep -D [ACTION]

I Unix kan nesten alt behandles som en fil. Følgelig kan en hvilken som helst enhet, en stikkontakt eller en FIFO-datastrøm mates til grep. Du kan bruke -D-flagget etterfulgt av en HANDLING (standardhandlingen er LES). Noen få andre alternativer er SKIP for å stille hoppe over bestemte enheter og RECURSE for å rekursivt gå gjennom kataloger og symlinker.

24. Gjentakelse

Hvis du leter etter gitt mønster som er en repetisjon av et kjent enklere mønster, så bruk krøllete bukseseler for å indikere antall repetisjoner

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

Dette skriver ut linjer som inneholder strenger på 10 eller flere sifre.

25. Gjentagelse stenografi

Noen spesialtegn er reservert for en bestemt type mønsterrepetisjon. Du kan bruke disse i stedet for krøllete bukseseler, hvis de passer ditt behov.

? : Mønsteret foran spørsmålstegnet skal stemme overens med null eller en gang.

*: Mønsteret foran stjernen skal matche null eller flere ganger.

+ : Mønsteret foran pluss skal matche en eller flere ganger.

25. Byte forskyvninger

Hvis du vil vite å se byteforskyvningen til linjene der det matchende uttrykket finnes, kan du også bruke flagget -b for å skrive ut forskyvningene. For å skrive ut forskyvningen til bare den matchende delen av en linje, kan du bruke -b-flagget med -o-flagget.

$ grep -b -o [filnavn]

Offset betyr ganske enkelt, etter hvor mange byte fra begynnelsen av filen, starter den samsvarende strengen.

26. egrep, fgrep og rgerp

Du vil ofte se påkallingen av egrep for å bruke den utvidede syntaksen for regulært uttrykk vi diskuterte tidligere. Dette er imidlertid en utdatert syntaks, og det anbefales at du unngår å bruke denne. Bruk grep -E i stedet. På samme måte bruker du grep -F, i stedet for fgrep og grep -r i stedet for rgrep.

27. grep -z

Noen ganger er ikke input til grep linjer som slutter med en ny linje. Hvis du for eksempel behandler en liste over filnavn, kan de komme fra forskjellige kilder. Flagget -z forteller grep å behandle NULL-tegnet som linjeavslutningen. Dette lar deg behandle den innkommende strømmen som en hvilken som helst vanlig tekstfil.

28. grep -a [filnavn]

Flagget -a forteller grep å behandle den medfølgende filen som om den var vanlig tekst. Filen kan være binær, men grep behandler innholdet inni som om det er tekst.

29. grep -U [filnavn]

Flagget -U forteller grep å behandle de medfølgende filene som om de er binære filer og ikke tekst. Som standard gjetter gjet filtypen ved å se på de første par byte. Ved å bruke dette flagget overstyrer det gjetningen.

30. grep -m NUM

Med store filer kan grepping for et uttrykk ta evig tid. Imidlertid, hvis du bare vil se etter de første NUM antall treff, kan du bruke flagget -m for å oppnå dette. Det er raskere, og produksjonen er ofte også håndterbar.

Konklusjon

Mye hverdagsjobb med et sysadmin innebærer å sile gjennom store tekststrenger. Dette kan være sikkerhetslogger, logger fra web- eller e-postserveren, brukeraktivitet eller til og med stor tekst på mansider. Grep gir deg den ekstra fleksibiliteten når du håndterer disse brukssakene.

Forhåpentligvis har de ovennevnte eksemplene og brukssakene hjulpet deg med å bedre forstå dette levende fossilet til en programvare.

Mus AppyMouse Pekeplate og musepeker på skjermen for Windows-nettbrett
AppyMouse Pekeplate og musepeker på skjermen for Windows-nettbrett
Nettbrettbrukere savner ofte musepekeren, spesielt når de bruker vanlige bærbare datamaskiner. Berøringsskjermen Smarttelefoner og nettbrett har mange...
Mus Midterste museknapp fungerer ikke i Windows 10
Midterste museknapp fungerer ikke i Windows 10
De midtre museknapp hjelper deg med å bla gjennom lange websider og skjermer med mye data. Hvis det stopper, vil du ende opp med å bruke tastaturet ti...
Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...