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 '\ $' bokEks 2: Finn en enkelt streng i en tekstfil
Å sende linjer i filen 'bok' som inneholder strengen '$ 14.99 ', type:
$ grep '$ 14 \.99 'bokEks 3: Finn en enkelt spesialbefrakter i en tekstfil
For å sende linjer i filen 'bok' som inneholder et '\' tegn, skriv:
$ grep '\\' bokEks 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 / ordFor å skrive ut alle linjene i filen 'bok' som begynner med teksten 'i begynnelsen', uansett sak, skriv:
$ grep -i 'i begynnelsen' bokenMERK: 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årEks 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 / ordFor 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 / ordFor å skrive ut alle linjene i '/ usr / dict / ord' som er tjueto eller flere tegn, skriver du:
$ grep 'ˆ.\ 22, \ $ '/ usr / dict / ordEks 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' playboyEks 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 himmelEks 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 / ordAlternativet '-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
- Linux System Admin Guide - Hva er Linux-operativsystem og hvordan det fungerer
- Linux System Admin Guide - Oversikt over Linux Virtual Memory og Disk Buffer Cache
- Linux System Admin Guide - Beste fremgangsmåter for overvåking av Linux-systemer
- Linux System Admin Guide - Beste fremgangsmåter for å utføre Linux-støvler og nedleggelser
- Linux System Admin Guide - Beste fremgangsmåter for å utføre og administrere sikkerhetskopiering
Ressurser for Linux-kjerneprogrammerere
- Hvordan fungerer Linux Management Memory Management
- Omfattende gjennomgang av Linux Kernel-operativsystemprosesser
- Hva er mekanismer bak Linux Kernel task management
Linux File System Dictionary
Omfattende gjennomgang av hvordan Linux File and Directory System fungerer