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' stammer fra en kommando i den nå obsolete unix ed line redigeringsverktøyet-ED-kommandoen for å søke 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. Etter hvert 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å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'

Sammendrag

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:

Ressurser for systemadministratorer

  • Linux System Admin Guide- Hva er Linux-operativsystem og hvordan det fungerer
  • Linux System Admin Guide- Oversikt over Linux Virtual Memory and Disk Buffer Cache
  • Linux System Admin Guide- Best Practices for Monitoring Linux Systems
  • Linux System Admin Guide- Best Practices for Performing Linux Boots and Shutdowns
  • Linux System Admin Guide- Best Practices for Making and Managing Backup Operations

Ressurser for Linux -kjerneprogrammerere

  • Hvordan Linux operativsystemminnehåndtering fungerer
  • Omfattende gjennomgang av Linux -kjerneoperativsystemprosesser
  • Hva er mekanismer bak Linux Kernel Task Management
Linux File System Dictionary

Omfattende gjennomgang av hvordan Linux -fil og katalogsystem fungerer