grep

Finne strenger i tekstfiler ved hjelp av grep med vanlig uttrykk

Finne strenger i tekstfiler ved hjelp av grep med vanlig uttrykk
grep er et av de mest populære verktøyene for å søke og finne strenger i en tekstfil. Navnet 'grep' kommer fra en kommando i det nå utdaterte Unix ed-redigeringsverktøyet - ed-kommandoen for søk globalt gjennom en fil for en vanlig uttrykk og så printing disse linjene var g / re / p, hvor re var det vanlige uttrykket du ville bruke. Til slutt ble grep-kommandoen skrevet for å gjøre dette søket på en fil når du ikke bruker ed.

I denne artikkelen viser vi deg å kjøre forhåndsstrengssøk ved hjelp av Grep med vanlig uttrykk ved å gi deg 10 praktiske eksempler på implementeringene. Mange eksempler diskutert i denne artikkelen har praktiske implikasjoner, noe som betyr at du kan bruke dem i din daglige Linux-programmering. Følgende eksempler beskriver noen eksempler på regexp for ofte søkte mønstre.

Eks 1: Finn en enkelt befrakter i en tekstfil

For å sende linjer i filen 'bok' som inneholder et '$', skriver du:

$ grep '\ $' bok

Eks 2: Finn en enkelt streng i en tekstfil

Å sende linjer i filen 'bok' som inneholder strengen '$ 14.99 ', type:

$ grep '$ 14 \.99 'bok

Eks 3: Finn en enkelt spesialbefrakter i en tekstfil

For å sende linjer i filen 'bok' som inneholder et '\' tegn, skriv:

$ grep '\\' bok

Eks 4: Matchende linjer som begynner med bestemt tekst

Bruk 'ˆ' i en regexp for å betegne begynnelsen på en linje.

For å skrive ut alle linjene i '/ usr / dict / ord' som begynner med 'pro', skriv:

$ grep 'ˆpro' / usr / dict / ord

For å skrive ut alle linjene i filen 'bok' som begynner med teksten 'i begynnelsen', uansett sak, skriv:

$ grep -i 'i begynnelsen' boken

MERK: Disse regexps ble sitert med 'tegn; Dette er fordi noen skjell ellers behandler 'ˆ' karakteren som en spesiell "metakarakter"

I tillegg til ord- og frasesøk kan du bruke grep til å søke etter komplekse tekstmønstre som kalles regulære uttrykk. Et regulært uttrykk - eller "regexp" - er en tekststreng med spesialtegn som spesifiserer a sett av mønstre å matche.

Teknisk sett er ord eller uttrykk mønstre vanlige uttrykk - bare veldig enkle. I et vanlig uttrykk representerer de fleste tegn - inkludert bokstaver og tall - seg selv. For eksempel regexp-mønsteret 1 samsvarer med strengen '1' og mønsteret gutt samsvarer med strengen 'gutt'.

Det er en rekke reserverte tegn kalt metategn som ikke representerer seg selv i et vanlig uttrykk, men de har en spesiell betydning som brukes til å bygge komplekse mønstre. Disse metategnene er som følger: ., *, [, ], ˆ, $ og \. Det er godt å merke seg at slike metategn er vanlig blant nesten alle vanlige og spesielle Linux-distribusjoner. Her er en god artikkel som dekker spesielle betydninger av metategnene og gir eksempler på bruken.

Eks 5: Matchende linjer som slutter med bestemt tekst

Bruk '$' som det siste tegnet i sitert tekst for å matche den teksten bare på slutten av en linje. For å sende linjer i filen som "slutter" med et utropstegn, skriv:

$ grep '!$ 'går

Eks 6: Matchende linjer med en viss lengde

For å matche linjer med en bestemt lengde, bruk det antallet '.'tegn mellom' ˆ 'og' $ '- for å for eksempel matche alle linjene som er to tegn (eller kolonner) brede, bruk' ˆ… $ 'som regexp for å søke etter.

For å skrive ut alle linjene i '/ usr / dict / ord' som er nøyaktig tre tegn brede, skriv:

$ grep 'ˆ ... $' / usr / dict / ord

For lengre linjer er det mer nyttig å bruke en annen konstruksjon: 'ˆ.\ number \ $ ', der tallet er antall linjer som skal matches. Bruk ',' for å spesifisere et tallnummer.

For å skrive ut alle linjene i '/ usr / dict / ord' som er nøyaktig tolv tegn, skriv:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / ord

For å skrive ut alle linjene i '/ usr / dict / ord' som er tjueto eller flere tegn, skriver du:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / ord

Eks 7: Matchende linjer som inneholder noen av noen Regexps

For å matche linjer som inneholder et hvilket som helst av et antall regexps, spesifiser du hvert av regexpsene du vil søke etter mellom alternasjonsoperatører ('\ |') som regexp for å søke etter. Linjer som inneholder noen av de gitte regexps vil bli sendt ut.

For å skrive ut alle linjene i 'playboy' som inneholder mønstrene 'boken' eller 'kake', skriv:

$ grep 'the book \ | cake' playboy

Eks 8: Matchende linjer som inneholder alle noen regexps

Å sende linjer som samsvarer alle av et antall regexps, bruk grep for å sende linjer som inneholder den første regexpen du vil matche, og rør utgangen til en grep med den andre regexp som et argument. Fortsett å legge rør til grep-søk etter alle regexps du vil søke etter.

For å skrive ut alle linjene i 'spilleliste' som inneholder både mønstre 'kysten' og 'himmelen', uansett sak, skriv:

$ grep -i 'the shore' spilleliste | grep -i himmel

Eks 9: Matchende linjer som bare inneholder visse tegn

For å matche linjer som bare inneholder bestemte tegn, bruk regexp 'ˆ [tegn] * $', der tegn er de som skal matche.  Skriv ut linjer i '/ usr / dict / ord' som bare inneholder vokaler, skriv:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / ord

Alternativet '-i' samsvarer med tegn uansett sak; i dette eksemplet samsvarer alle vokaltegnene uansett tilfelle.

Eks 10: Finne setninger uansett mellomrom

En måte å søke etter et uttrykk som kan forekomme med ekstra mellomrom mellom ord, eller over en linje eller sideskift, er å fjerne alle linjematinger og ekstra mellomrom fra inngangen, og deretter grep det. For å gjøre dette, rør inngangen til tr med "\ r \ n: \> \ | -" som et argument til alternativet '-d' (fjern alle linjeskift fra inngangen); rør det til fmt-filteret med '-u' alternativet (skriv ut teksten med jevnt mellomrom); og rør det for å gripe med mønsteret å søke etter.

For å søke over linjeskift etter strengen "samtidig som" i filen "docs", skriv:

$ kattdokumenter | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'samtidig som'

Sammendrag

I denne artikkelen gjennomgikk vi 10 praktiske eksempler på bruk av Grep Linux-kommando for å søke og finne strenger i en tekstfil. Underveis lærte vi hvordan vi bruker regulære uttrykk i forbindelse med Grep for å utføre komplekse søk på tekstfiler. Nå har du fått en bedre ide om hvor kraftige Linux-søkefunksjoner er.

Her er flere ressurser for de som er interessert i å lære mer om Linux-programmering:

Ressurser for systemadministratorer

Ressurser for Linux-kjerneprogrammerere

Linux File System Dictionary

Omfattende gjennomgang av hvordan Linux File and Directory System fungerer

Mus Topp 5 ergonomiske datamuseprodukter for Linux
Topp 5 ergonomiske datamuseprodukter for Linux
Gir langvarig bruk av datamaskiner smerter i håndleddet eller fingrene? Lider du av stive ledd og må hele tiden riste på deg hendene? Føler du en bren...
Mus Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
De fleste Linux-distribusjoner leveres med "libinput" -biblioteket som standard for å håndtere inngangshendelser på et system. Den kan behandle inngan...
Mus Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kanskje du trenger et verktøy som kan gjøre at musens kontroll endres med hvert program du bruker. Hvis dette er tilfelle, kan du prøve et program som...