Linux grep-kommandoen brukes som en metode for filtrering av inngang. GREP står for Global Regular Expression Printer og derfor for å kunne bruke den effektivt, bør du ha litt kunnskap om regulære uttrykk.
I denne artikkelen vil du lære en rekke eksempler som vil hjelpe deg å forstå grep-kommandoen.
01 av 09Slik søker du etter en streng i en fil som bruker GREP
Tenk deg at du har en tekstfil som heter bøker med følgende barns boktitler:
- Robin Hood
- Rødhette
- Peter Pan
- Gullhår og de tre bjørnene
- Snøhvit og de syv dvergene
- Pinnochio
- Katten i hatten
- De tre små griser
- Gruffalo
- Charlie og sjokoladefabrikken
For å finne alle bøkene med ordet "The" i tittelen, bruker du følgende syntaks:
grep bøkeneFølgende resultater blir returnert:
- Gullhår og de tre bjørnene
- Snøhvit og de syv dvergene
- Katten i hatten
- De tre små griser
- Gruffalo
- Charlie og sjokoladefabrikken
I hvert tilfelle vil ordet "The" bli uthevet.
Søket er saksfølsomt, så hvis en av titlene hadde "den" i stedet for "The", ville den ikke blitt returnert.
For å ignorere saken kan du legge til følgende bryter:
grep bøkene --ignore-caseDu kan også bruke -i-bryteren som følger:
Fortsett å lese nedenfor
02 av 09Søk etter en streng i en fil ved hjelp av jokertegn
Grep-kommandoen er veldig kraftig. Du kan bruke en rekke mønster matching teknikker for å filtrere resultater.
I dette eksemplet vil jeg vise deg hvordan du søker etter en streng i en fil ved hjelp av jokertegn.
Tenk deg at du har en fil som heter steder med følgende skotske stednavn:
AberdeenAberystwythAberlourInverurieInvernessNewburghny hjortny gallowayglasgowedinburghHvis du vil finne alle stedene med inver i navnet, bruk følgende syntaks:
grep inver * stederAsterisk (*) wildcard står for 0 eller mange. Derfor, hvis du har et sted som heter Inver eller et sted som heter Inverness, vil begge bli returnert.
Et annet jokertegn du kan bruke er perioden (.). Du kan bruke dette til å matche et enkelt brev.
grep inver.r stederKommandoen ovenfor vil finne steder som heter inverurie og inverary, men vil ikke finne invereerie fordi det bare kan være ett jokertegn mellom de to r som angitt av den enkelte perioden.
Perioden wildcard er nyttig, men det kan forårsake problemer hvis du har en som en del av teksten du søker.
Se for eksempel på denne listen over domenenavn
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
For å finne alt om .coms kan du bare søke ved hjelp av følgende syntaks:
grep * om * domainnamesKommandoen ovenfor vil falle ned hvis listen inneholdt følgende navn i den:
- everydaylinuxuser.com/about.html
Du kan derfor prøve følgende syntaks:
grep * about.com domenenavnDette ville fungere bra med mindre det var et domene med følgende navn:
aboutycom.comFor å virkelig søke etter begrepet about.com må du unnslippe prikken på følgende måte:
grep * om .com domenenavnDet endelige jokertegnet som viser deg er spørsmålet som står for null eller ett tegn.
For eksempel:
grep? ber plassnavnOvennevnte kommando ville returnere aberdeen, aberystwyth eller til og med berwick.
Fortsett å lese nedenfor
03 av 09Søk etter strenger i begynnelsen og slutten av linjen ved hjelp av grep
Karat (^) og dollar ($) symbolet lar deg søke etter mønstre i begynnelsen og slutten av linjene.
Tenk deg at du har en fil kalt fotball med følgende lagnavn:
- Blackpool
- Liverpool
- Manchester City
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
Hvis du ønsket å finne alle lagene som begynte med Manchester, ville du bruke følgende syntaks:
grep ^ Manchester lageneKommandoen ovenfor ville returnere Manchester City og Manchester United, men ikke FC United Of Manchester.
Alternativt kan du finne alle lagene som slutter med United, ved å bruke følgende syntaks:
grep United $ lagKommandoen ovenfor ville gå tilbake til Manchester United og Newcastle United, men ikke FC United Of Manchester.
04 av 09Å telle antall treff ved hjelp av grep
Hvis du ikke vil returnere de faktiske linjene som samsvarer med et mønster ved hjelp av grep, men du bare vil vite hvor mange det er, kan du bruke følgende syntaks:
grep-c mønster inputfileHvis mønsteret ble matchet to ganger, ble nummer 2 returnert.
Fortsett å lese nedenfor
05 av 09Finne alle vilkårene som ikke samsvarer med grep
Tenk deg at du har en liste over stedsnavn med landene som er oppført som følger:
- Aberdeen Skottland
- glasgow Scotland
- liverpool England
- colwyn bay
- London, England
Du har kanskje lagt merke til at colwyn bay ikke har noe tilknyttet det.
Hvis du vil søke etter alle stedene med et land, kan du bruke følgende syntaks:
grep land $ stederResultatene returnerer ville være alle steder unntatt colwyn bay.
Dette virker åpenbart bare for steder som slutter i land (neppe vitenskapelig).
Du kan invertere valget ved hjelp av følgende syntaks:
grep -v land $ stederDette ville finne alle stedene som ikke endte med land.
06 av 09Slik finner du tomme linjer i filer ved hjelp av grep
Tenk deg at du har en inngangsfil som brukes av et tredjepartsprogram som stopper å lese filen når den finner en tom linje som følger:
- Aberdeen Skottland
- inverness scotland
- liverpool england
- colwyn bay wales
Når søknaden kommer til linjen etter liverpool, vil den slutte å lese meningen colwyn bay er helt savnet.
Du kan bruke grep til å søke etter tomme linjer med følgende syntaks:
grep ^ $ stederDessverre er dette ikke spesielt nyttig fordi det bare returnerer de tomme linjene.
Du kan selvfølgelig få en telling av antall tomme linjer som en sjekk for å se om filen er gyldig som følger:
grep -c ^ $ stederDet ville imidlertid være mer nyttig å vite linjenumrene som har en tom linje slik at du kan erstatte dem. Du kan gjøre det med følgende kommando:
grep -n ^ $ stederFortsett å lese nedenfor
07 av 09Slik søker du etter snorer av store eller små bokstaver ved hjelp av grep
Ved hjelp av grep kan du bestemme hvilke linjer i en fil som har store bokstaver ved hjelp av følgende syntaks:
grep 'A-Z' filnavnDe firkantede parentesene lar deg bestemme antall tegn. I eksempelet ovenfor samsvarer det med et hvilket som helst tegn som er mellom A og Z.
Derfor, for å matche små bokstaver, kan du bruke følgende syntaks:
grep 'a-z' filnavnHvis du vil bare matche bokstaver og ikke numeriske tegn eller andre symboler, kan du bruke følgende syntaks:
grep 'a-zA-Z' filnavnDu kan gjøre det samme med tallene som følger:
grep '0-9' filnavn 08 av 09Ser etter gjentatte mønstre ved hjelp av grep
Du kan bruke krøllete parentes {} for å søke etter et gjentatt mønster.
Tenk deg at du har en fil med telefonnumre som følger:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Du vet at den første delen av nummeret må være tre sifre og du vil finne linjene som ikke samsvarer med dette mønsteret.
Fra forrige eksempel vet du at 0-9 returnerer alle tall i en fil.
I dette tilfellet ønsker vi linjene som starter med tre tall etterfulgt av en bindestrek (-). Du kan gjøre det med følgende syntaks:
grep "^ 0-9 0-9 0-9 -" tallSom vi vet fra tidligere eksempler betyr karat (^) at linjen må begynne med følgende mønster.
0-9 vil søke etter et tall mellom 0 og 9. Da dette er inkludert tre ganger, matcher det 3 tall. Til slutt er det en bindestrek for å indikere at en bindestrek må lykkes de tre tallene.
Ved å bruke de krøllede parentesene kan du gjøre søket mindre som følger:
grep "^ 0-9 {3 } -" tallSlash unngår {bracket slik at det fungerer som en del av det vanlige uttrykket, men i hovedsak hva dette sier er 0-9 {3} som betyr et tall mellom 0 og 9 tre ganger.
De krøllete parentesene kan også brukes som følger:
{5,10}{5,}{5,10} betyr at tegnet som søges etter, må gjentas minst 5 ganger, men ikke mer enn 10, mens {5,} betyr at tegnet må gjentas minst fem ganger, men det kan være mer enn det.
Fortsett å lese nedenfor
09 av 09Bruke utgangen fra andre kommandoer ved hjelp av grep
Hittil har vi sett på mønstermatching i individuelle filer, men grep kan bruke utdata fra andre kommandoer som inngang for mønstermatching.
Et godt eksempel på dette er å bruke ps-kommandoen som viser aktive prosesser.
For eksempel, kjør følgende kommando:
ps -efAlle løpende prosesser på systemet ditt vil bli vist.
Du kan bruke grep til å søke etter en bestemt løpeprosess som følger:
ps -ef | grep firefoxSammendrag
Grep-kommandoen er en grunnleggende Linux-kommando, og det er en som er vel verdt å lære, da det vil gjøre livet ditt mye lettere når du søker etter filer og prosesser når du bruker terminalen.