I denne artikkelen viser vi deg å kjøre forhåndsstrengsøk ved hjelp av GREP med vanlig uttrykk ved å gi deg 10 praktiske eksempler på implementeringene. Mange eksempler omtalt i denne artikkelen har praktiske implikasjoner som betyr at du kan bruke dem i din daglige Linux -programmering. Følgende prøver beskriver noen regexp-eksempler for ofte søkte mønstre.
Eks 1: Finn en enkelt charter i en tekstfil
For å sende ut linjer i filen 'bok' som inneholder en '$' -tegn, type:
$ grep '\ $' bok
Eks 2: Finn en enkelt streng i en tekstfil
Å sende ut linjer i filen 'bok' som inneholder strengen '$ 14.99 ', type:
$ grep '\ $ 14 \.99 'bok
Eks 3: Finn en enkelt spesiell charter i en tekstfil
For å sende ut linjer i filen 'bok' som inneholder et '\' tegn, type:
$ grep '\\' bok
Eks 4: Matchende linjer som begynner med viss tekst
Bruk 'ˆ' i en regexp for å betegne begynnelsen på en linje.
For å sende ut alle linjer i '/usr/dict/ord' Begynner med 'pro', type:
$ grep 'ˆpro'/usr/dict/ord
For å sende ut alle linjer i filen 'bok' som begynner med teksten 'i begynnelsen', uansett tilfelle, skriv: Skriv:
$ grep -i 'ˆin begynnelsen' bok
MERK: Disse regexpene ble sitert med 'tegn; Dette er fordi noen skjell ellers behandler 'ˆ' -karakteren som en spesiell "Metacharacter"
I tillegg til ord- og setningssøk, kan du bruke grep til å søke etter komplekse tekstmønstre kalt vanlige uttrykk. Et vanlig uttrykk-eller "regexp"-er en tekststreng med spesialtegn som spesifiserer en sett av mønstre å matche.
Teknisk sett er ordet eller setningsmønstrene vanlige uttrykk-bare veldig enkle. I et vanlig uttrykk representerer de fleste tegn-inkludert bokstaver og representerer seg selv. For eksempel regexp -mønsteret 1 samsvarer med strengen '1', og mønsteret gutt Matcher strengen 'Boy'.
Det er en rekke reserverte karakterer kalt metacharacters som ikke representerer seg i et vanlig uttrykk, men de har en spesiell betydning som brukes til å bygge komplekse mønstre. Disse metakarakterene er som følger: ., *, [, ], ˆ, $, og \. Det er bra å merke seg at slike metakarakterere er vanlige blant nesten alle vanlige og spesielle Linux -distribusjoner. Her er en god artikkel som dekker spesielle betydninger av metakarakterene og gir eksempler på bruken av dem.
Eks 5: Matchende linjer som slutter med viss tekst
Bruk '$' som den siste karakteren av sitert tekst for å matche den teksten bare på slutten av en linje. For å sende ut linjer i filen 'Going' som slutter med et utropstegn, type:
$ grep '!$ 'går
Eks 6: Matchende linjer med en viss lengde
For å matche linjer med en bestemt lengde, bruk antallet '.'Karakterer mellom' ˆ 'og' $ '- for eksempel, for å matche alle linjer som er to tegn (eller kolonner), bruk' ˆ ... $ 'som regexp for å søke etter.
For å sende ut alle linjer 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: 'ˆ.\ nummer \ $ ', hvor antallet er antall linjer som skal matche. Bruk ',' for å spesifisere en rekke tall.
For å sende ut alle linjer i '/usr/dict/ord' som er nøyaktig tolv tegn brede, skriv:
$ grep 'ˆ.\ 12 \ $ '/usr/dict/ord
For å sende ut alle linjer i '/usr/dict/ord' som er tjueto eller flere tegn brede, skriv:
$ grep 'ˆ.\ 22, \ $ '/usr/dict/ord
Eks 7: Matchende linjer som inneholder noen av noen regexps
For å matche linjer som inneholder noen av en rekke REGEXP -er, spesifiserer du hver av REGEXP -ene for å søke etter mellom vekslingsoperatører ('\ |') som REGEXP for å søke etter. Linjer som inneholder noen av de gitte regexpsene vil komme ut.
For å sende ut alle linjer i 'Playboy' som inneholder enten mønstrene 'The Book' eller 'Cake', type:
$ grep 'boken \ | kake' playboy
Eks 8: Matchende linjer som inneholder alle noen regexps
Å sende ut linjer som samsvarer med alle Av en rekke regexps, bruk grep til utgangslinjer som inneholder den første regexp du vil matche, og rør utgangen til et grep med den andre regexp som et argument. Fortsett å legge rør til GREP -søk etter alle regexpsene du vil søke etter.
For å sende ut alle linjer i 'Playlist' som inneholder både mønstre 'The Shore' og 'Sky', uansett tilfelle, type:
$ grep -i 'The Shore' spilleliste | grep -i himmel
Eks 9: Matchende linjer som bare inneholder visse tegn
For å matche linjer som bare inneholder visse tegn, bruker du regexp 'ˆ [tegn]*$', der karakterer er de som passer. For å sende ut linjer i '/usr/dict/ord' som bare inneholder vokaler, type:
$ grep -i 'ˆ [aeiou]*$'/usr/dict/ord
Alternativet '-i' samsvarer med tegn uansett sak; Så i dette eksemplet blir alle vokalkarakterer matchet uavhengig av tilfelle.
Eks 10: Finne setninger uavhengig av avstand
En måte å søke etter en setning som kan oppstå med ekstra mellomrom mellom ord, eller på tvers av en linje eller sidepause, er å fjerne alle linjefeeds og ekstra mellomrom fra inngangen, og deretter grep det. For å gjøre dette, pipe inngangen til TR med "\ r \ n: \> \ |-" som et argument til '-D' -alternativet (fjerne alle linjeskift fra inngangen); Rør det til FMT-filteret med alternativet '-u' (send ut teksten med ensartet avstand); og pipe det for å grep med mønsteret å søke etter.
For å søke på tvers av linjeselier etter strengen 'samtidig som' I filen 'Docs', skriv: Skriv:
$ kattedokumenter | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'samtidig som'
I denne artikkelen gjennomgikk vi 10 praktiske eksempler på å bruke GREP Linux -kommandoen for å søke og finne strenger i en tekstfil. Underveis lærte vi hvordan vi bruker vanlige uttrykk i forbindelse med GREP for å gjennomføre komplekse søk på tekstfiler. Nå har du 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:
Omfattende gjennomgang av hvordan Linux -fil og katalogsystem fungerer