Hvordan bruke regex med 'awk' -kommandoen

Hvordan bruke regex med 'awk' -kommandoen

Et vanlig uttrykk (regex) brukes til å finne en gitt sekvens av tegn i en fil. Symboler som bokstaver, sifre og spesialtegn kan brukes til å definere mønsteret. Ulike oppgaver kan enkelt fullføres ved å bruke regex -mønstre. I denne opplæringen vil vi vise deg hvordan du bruker regex -mønstre med 'awk' -kommandoen.

Grunnpersonene som brukes i mønstre

Mange tegn kan brukes til å definere et regex -mønster. Karakterene som oftest brukes til å definere regex -mønstre er definert nedenfor.

Karakter Beskrivelse
. Match noen karakter uten en ny linje (\ n)
\ Sitat en ny metakarakter
^ Match begynnelsen på en linje
$ Match slutten av en linje
| Definer et alternativ
() Definere en gruppe
[] Definer en karakterklasse
\ w Match ethvert ord
\ S Match enhver hvit romkarakter
\ d Match ethvert siffer
\ b Match en hvilken som helst ordgrense

Opprett en fil

For å følge med med denne opplæringen, oppretter du en tekstfil som heter Produkter.tekst. Filen skal inneholde fire felt: ID, navn, type og pris.

ID Navn Type Pris

P1001 15 "Monitor Monitor $ 100

P1002 A4Tech Mus Mouse $ 10

P1003 Samsung Printer Printer $ 50

P1004 HP Scanner Scanner $ 60

P1005 Logitech Mouse Mouse $ 15

Eksempel 1: Definer et regex -mønster ved hjelp av karakterklassen

Følgende 'awk' -kommando vil søke etter og utskriftslinjer som inneholder tegnet 'n' etterfulgt av karakterene 'er'.

$ katteprodukter.tekst
$ awk '/ [n] [er]/ skriv ut $ 0' produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Utgangen viser linjen som samsvarer med mønsteret. Her samsvarer bare med en linje mønsteret.

Eksempel 2: Definer et regex -mønster ved hjelp av '^' -symbolet

Følgende 'AWK' -kommando vil søke etter og skrive ut linjer som starter med tegnet 'P' og inkluderer nummer 3.

$ katteprodukter.tekst
$ awk '/^p.*3/ skriv ut $ 0 'produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Her er det en linje som samsvarer med mønsteret.

Eksempel 3: Definer et regex -mønster ved hjelp av GSUB -funksjonen

De gsub () Funksjon brukes til å søke globalt etter og erstatte tekst. Følgende 'awk' kommando vil søke etter ordet 'skanner' og erstatte det med ordet 'ruter' før du skriver ut resultatet.

$ katteprodukter.tekst
$ awk 'gsub (/scanner/, "router")' produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Det er en linje som inneholder ordet 'Skanner', og'Skanner'erstattes av ordet'Ruter'Før linjen skrives ut.

Eksempel 4: Definer et regex -mønster med '*'

Følgende 'awk' -kommando vil søke etter og skrive ut hvilken som helst streng som starter med 'mo' og inkluderer ethvert påfølgende tegn.

$ katteprodukter.tekst
$ awk '/ mo*/ skriv ut $ 0' produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Tre linjer samsvarer med mønsteret: to linjer inneholder ordet 'Mus'Og en linje inneholder ordet'Observere'.

Eksempel 5: Definer et regex -mønster ved hjelp av '$' -symbolet

Følgende 'AWK' -kommando vil søke etter og skrive ut linjer i filen som avsluttes med nummer 5.

$ katteprodukter.tekst
$ awk '/ 5 $/ skriv ut $ 0' produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Det er bare en linje i filen som ender med nummer 5.

Eksempel 6: Definer et regex -mønster ved å bruke '^' og '|' symboler

'^'Symbol indikerer starten på en linje, og'|'Symbol indikerer en logisk eller uttalelse. Følgende 'AWK' -kommando vil søke etter og skrive ut linjer som starter med tegnet 'p'og inneholder en av'Skanner'Eller'Mus'.

$ katteprodukter.tekst
$ awk '/^p.* (Skanner | mus)/'produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Utgangen viser at to linjer inneholder ordet 'Mus'Og en linje inneholder ordet'Skanner'. De tre linjene starter med karakteren 'p'.

Eksempel 7: Definer et regex -mønster ved hjelp av '+' -symbolet

'+Operatøren brukes til å finne minst en kamp. Følgende 'awk' -kommando vil søke etter og skrive ut linjer som inneholder tegnet 'n' i hvert fall en gang.

$ katteprodukter.tekst
$ awk '/n+/print' produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Her, karakteren 'n'Inneholder forekommer minst en gang i linjene som inneholder ordene Monitor, skriver og skanner.

Eksempel 8: Definer et regex -mønster ved hjelp av GSUB () -funksjonen

Følgende 'awk' kommando vil globalt søke etter ordet 'Skriver'og erstatt det med ordet'Observere' bruker GSUB () -funksjon.

$ katteprodukter.tekst
$ awk 'gsub (/printer/, “monitor”) print $ 0' produkter.tekst

Følgende utgang vil bli produsert etter å ha kjørt kommandoene ovenfor. Den fjerde linjen i filen inneholder ordet 'Skriver'To ganger, og i utgangen,'Skriver'har blitt erstattet av ordet'Observere'.

Konklusjon

Mange symboler og funksjoner kan brukes til å definere regex -mønstre for forskjellige søk og erstatte oppgaver. Noen symboler som vanligvis brukes i regex -mønstre, brukes i denne opplæringen med 'awk' -kommandoen.