Linux grep-kommandoen bruges som en metode til filtrering af input. GREP står for Global Regular Expression Printer, og derfor bør du have viden om regulære udtryk for at kunne bruge det effektivt.
I denne artikel lærer du en række eksempler, der hjælper dig med at forstå grep-kommandoen.
01 af 09Sådan søger du en streng i en fil ved hjælp af GREP

Forestil dig at du har en tekstfil kaldet bøger med følgende børns bogtitler:
- Robin Hood
- Lille Rødhætte
- Peter Pan
- Goldilocks og de tre bjørne
- Snehvide og de syv dværge
- Pinnochio
- Katten i hatten
- De tre små grise
- Gruffalo
- Charlie og chokoladefabrikken
For at finde alle bøgerne med ordet "The" i titlen, ville du bruge følgende syntaks:
grep bøgerneFølgende resultater vil blive returneret:
- Goldilocks og de tre bjørne
- Snehvide og de syv dværge
- Katten i hatten
- De tre små grise
- Gruffalo
- Charlie og chokoladefabrikken
I hvert tilfælde vil ordet "The" blive fremhævet.
Søgningen er følsom, så hvis en af titlerne havde "den" i stedet for "The", ville den ikke være blevet returneret.
For at ignorere sagen kan du tilføje følgende switch:
grep bøgerne --ignore-caseDu kan også bruge -i-kontakten som følger:
Fortsæt læsning herunder
02 af 09Søg efter en streng i en fil vha. Wildcards
Grep-kommandoen er meget kraftfuld. Du kan bruge et væld af mønster matching teknikker til at filtrere resultater.
I dette eksempel vil jeg vise dig, hvordan man søger efter en streng i en fil vha. Jokertegn.
Forestil dig at du har en fil kaldet steder med følgende skotske stednavne:
aberdeenAberystwythAberlourInverurieInvernessNewburghnye hjorteny gallowayGlasgowedinburghHvis du vil finde alle steder med inver i navnet, brug følgende syntaks:
grep inver * stederDen asteriske (*) wildcard står for 0 eller mange. Derfor, hvis du har et sted kaldet Inver eller et sted, der hedder Inverness, vil begge blive returneret.
Et andet wildcard du kan bruge er perioden (.). Du kan bruge dette til at matche et enkelt bogstav.
grep inver.r stederOvennævnte kommando ville finde steder kaldet inverurie og inverary, men ville ikke finde invereerie, fordi der kun kan være et wildcard mellem de to r'er som angivet ved den enkelte periode.
Perioden wildcard er nyttig, men det kan medføre problemer, hvis du har en som en del af teksten, du søger.
Se for eksempel på denne liste over domænenavne
- 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 at finde alle de om .coms kan du bare søge ved hjælp af følgende syntaks:
grep * om * domænenavneOvennævnte kommando ville falde ned, hvis listen indeholdt følgende navn i den:
- everydaylinuxuser.com/about.html
Du kan derfor prøve følgende syntaks:
grep * about.com domænenavneDette ville fungere ok, medmindre der var et domæne med følgende navn:
aboutycom.comFor virkelig at søge efter ordet about.com skal du undslippe prikken som følger:
grep * om .com domænenavneDet endelige wildcard, der viser dig, er spørgsmålet, der står for nul eller et tegn.
For eksempel:
grep? ber placenamesOvennævnte kommando ville returnere aberdeen, aberystwyth eller endda berwick.
Fortsæt læsning herunder
03 af 09Søg efter snore i begyndelsen og slutningen af linjen ved hjælp af grep
Karat (^) og dollar ($) symbolet giver dig mulighed for at søge efter mønstre i begyndelsen og slutningen af linjerne.
Forestil dig at du har en fil kaldet fodbold med følgende holdnavne:
- Blackpool
- Liverpool
- Manchester By
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
Hvis du ønskede at finde alle de hold, der begyndte med Manchester, ville du bruge følgende syntaks:
grep ^ Manchester holdOvenstående kommando ville returnere Manchester City og Manchester United, men ikke FC United Of Manchester.
Alternativt kan du finde alle holdene, der slutter med United, ved hjælp af følgende syntaks:
grep United $ holdOvennævnte kommando ville vende tilbage til Manchester United og Newcastle United, men ikke FC United Of Manchester.
04 af 09Tæller antallet af kampe ved hjælp af grep
Hvis du ikke vil returnere de faktiske linjer, der matcher et mønster ved hjælp af grep, men du bare vil vide, hvor mange der er, kan du bruge følgende syntaks:
grep -c mønster inputfilHvis mønsteret blev matchet to gange, blev nummer 2 returneret.
Fortsæt læsning herunder
05 af 09Finde alle de vilkår, der ikke matcher ved hjælp af grep
Forestil dig at du har en liste over stednavne med de lande, der er opført som følger:
- Aberdeen Skotland
- glasgow Scotland
- liverpool England
- colwyn bay
- London, England
Du har måske bemærket, at colwyn bay ikke har noget land i forbindelse med det.
For at søge efter alle steder med et land kan du bruge følgende syntaks:
grep land $ stederResultaterne returnerer ville være alle steder undtagen for colwyn bay.
Dette virker naturligvis kun for steder, der slutter i land (næppe videnskabeligt).
Du kan vende om markeringen ved hjælp af følgende syntaks:
grep -v land $ stederDette ville finde alle de steder, der ikke sluttede med jord.
06 af 09Sådan finder du tomme linjer i filer, der bruger grep
Forestil dig, at du har en inputfil, som bruges af en tredjepartsprogram, der stopper læsning af filen, når den finder en tom linje som følger:
- aberdeen scotland
- inverness scotland
- liverpool england
- colwyn bay wales
Når applikationen kommer til linjen efter liverpool vil den stoppe med at læse mening colwyn bay mangler helt.
Du kan bruge grep til at søge efter tomme linjer med følgende syntaks:
grep ^ $ stederDesværre er dette ikke særlig nyttigt, fordi det bare returnerer de tomme linjer.
Du kan selvfølgelig få et tal af antallet af tomme linjer som en check for at se, om filen er gyldig som følger:
grep -c ^ $ stederDet ville dog være mere nyttigt at kende linjenumrene, der har en tom linje, så du kan erstatte dem. Du kan gøre det med følgende kommando:
grep -n ^ $ stederFortsæt læsning herunder
07 af 09Sådan søger du efter snore af store eller små bogstaver ved hjælp af grep
Ved hjælp af grep kan du bestemme hvilke linjer i en fil der har store bogstaver ved hjælp af følgende syntaks:
grep 'A-Z' filnavnDe firkantede parenteser giver dig mulighed for at bestemme antallet af tegn. I ovenstående eksempel matcher det ethvert tegn, som er mellem A og Z.
Derfor kan du kombinere små bogstaver med følgende syntaks:
grep 'a-z' filnavnHvis du kun vil matche bogstaver og ikke numeriske eller andre symboler, kan du bruge følgende syntaks:
grep 'a-zA-Z' filnavnDu kan gøre det samme med tal som følger:
grep '0-9' filnavn 08 af 09Leder efter gentagne mønstre ved hjælp af grep
Du kan bruge krøllet parentes {} for at søge efter et gentagende mønster.
Forestil dig 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 ved, at den første del af nummeret skal være tre cifre, og du vil finde de linjer, der ikke passer til dette mønster.
Fra det foregående eksempel ved du at 0-9 returnerer alle numre i en fil.
I dette tilfælde ønsker vi linjerne, der starter med tre tal efterfulgt af en bindestreg (-). Du kan gøre det med følgende syntaks:
grep "^ 0-9 0-9 0-9 -" numreSom vi ved fra tidligere eksempler betyder karat (^) at linjen skal begynde med det følgende mønster.
0-9 søger efter et tal mellem 0 og 9. Da dette er inkluderet tre gange, matcher det 3 tal. Endelig er der en bindestreg til at angive, at en bindestreg skal lykkes de tre tal.
Ved at bruge de krøllede parenteser kan du gøre søgningen mindre som følger:
grep "^ 0-9 {3 } -" numreSlash'et undslipper {bracket, så det virker som en del af det regulære udtryk, men det betyder i det væsentlige 0-9 {3}, hvilket betyder et tal mellem 0 og 9 tre gange.
De krøllede parenteser kan også bruges som følger:
{5,10}{5,}{5,10} betyder at karakteren, der søges efter, skal gentages mindst 5 gange, men ikke mere end 10, mens {5,} betyder at tegnet skal gentages mindst 5 gange, men det kan være mere end det.
Fortsæt læsning herunder
09 af 09Brug af output fra andre kommandoer Brug grep
Hidtil har vi kigget på mønster matching inden for individuelle filer, men grep kan bruge output fra andre kommandoer som input til mønster matching.
Et godt eksempel på dette bruger ps-kommandoen, som viser aktive processer.
Kør for eksempel følgende kommando:
ps -efAlle de kørende processer på dit system vil blive vist.
Du kan bruge grep til at søge efter en bestemt løbeproces som følger:
ps -ef | grep firefoxResumé
Grep-kommandoen er en grundlæggende Linux-kommando, og det er en, der er værd at lære, da det vil gøre dit liv meget lettere, når du søger efter filer og processer, når du bruger terminalen.




