Et regulært udtryk (regex) bruges til at finde en given rækkefølge af tegn i en fil. Symboler som bogstaver, cifre og specialtegn kan bruges til at definere mønsteret. Forskellige opgaver kan let udføres ved hjælp af regex-mønstre. I denne vejledning viser vi dig, hvordan du bruger regex-mønstre med kommandoen 'awk'.
De grundlæggende tegn, der bruges i mønstre
Mange tegn kan bruges til at definere et regex-mønster. De tegn, der oftest bruges til at definere regex-mønstre, er defineret nedenfor.
Karakter | Beskrivelse |
---|---|
. | Match ethvert tegn uden en ny linje (\ n) |
\ | Citér en ny metakarakter |
^ | Match begyndelsen på en linje |
$ | Match slutningen af en linje |
| | Definer en alternativ |
() | Definer en gruppe |
[] | Definer en karakterklasse |
\ w | Match ethvert ord |
\ s | Match ethvert hvidt mellemrum |
\ d | Match ethvert ciffer |
\ b | Match enhver ordgrænse |
Opret en fil
For at følge med i denne vejledning skal du oprette en tekstfil med navnet Produkter.txt. Filen skal indeholde fire felter: ID, navn, type og pris.
ID-navn Type Pris
p1001 15 "skærmmonitor $ 100
p1002 A4tech-musmus $ 10
p1003 Samsung printerprinter $ 50
p1004 HP-scannerscanner $ 60
p1005 Logitech Mouse Mouse $ 15
Eksempel 1: Definer et regex-mønster ved hjælp af tegnklassen
Den følgende kommando 'awk' søger efter og udskriver linjer, der indeholder tegnet 'n' efterfulgt af tegnene 'er'.
$ kat produkter.txt$ awk '/ [n] [er] / print $ 0' produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Outputtet viser den linje, der matcher mønsteret. Her matcher kun en linje mønsteret.
Eksempel 2: Definer et regex-mønster ved hjælp af symbolet '^'
Den følgende kommando 'awk' søger efter og udskriver linjer, der starter med tegnet 'p' og inkluderer tallet 3.
$ kat produkter.txt$ awk '/ ^ s.* 3 / udskriv $ 0 produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Her er der en linje, der matcher mønsteret.
Eksempel 3: Definer et regex-mønster ved hjælp af gsub-funktionen
Det gsub () funktion bruges til globalt at søge efter og erstatte tekst. Den følgende kommando 'awk' søger efter ordet 'Scanner' og erstatter det med ordet 'Router', før resultatet udskrives.
$ kat produkter.txt$ awk 'gsub (/ Scanner /, "Router")' produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Der er en linje, der indeholder ordet 'Scanner'og'Scanner'erstattes af ordet'Router'før linjen udskrives.
Eksempel 4: Definer et regex-mønster med '*'
Den følgende kommando 'awk' søger efter og udskriver en streng, der starter med 'Mo' og inkluderer et efterfølgende tegn.
$ kat produkter.txt$ awk '/ Mo * / print $ 0' produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Tre linjer matcher mønsteret: to linjer indeholder ordet 'Mus'og en linje indeholder ordet'Overvåge''.
Eksempel 5: Definer et regex-mønster ved hjælp af '$' symbolet
Den følgende kommando 'awk' søger efter og udskriver linjer i filen, der slutter med nummeret 5.
$ kat produkter.txt$ awk '/ 5 $ / print $ 0' produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Der er kun en linje i filen, der slutter med tallet 5.
Eksempel 6: Definer et regex-mønster ved hjælp af '^' og '|' symboler
Det '^'symbol angiver starten på en linje, og'|'symbol angiver et logisk ELLER udsagn. Den følgende kommando 'awk' søger efter og udskriver linjer, der starter med tegnet 's'og indeholder enten'Scanner'eller'Mus''.
$ kat produkter.txt$ awk '/ ^ s.* (Scanner | Mus) / 'produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Outputtet viser, at to linjer indeholder ordet 'Mus'og en linje indeholder ordet'Scanner''. De tre linjer starter med tegnet 's''.
Eksempel 7: Definer et regex-mønster ved hjælp af '+' symbolet
Det '+'operatør bruges til at finde mindst et match. Den følgende kommando 'awk' søger efter og udskriver linjer, der indeholder tegnet 'n' mindst en gang.
$ kat produkter.txt$ awk '/ n + / print' produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Her er karakteren 'n'indeholder forekommer mindst én gang i de linjer, der indeholder ordene Skærm, printer og scanner.
Eksempel 8: Definer et regex-mønster ved hjælp af funktionen gsub ()
Den følgende kommando 'awk' søger globalt efter ordet 'Printer'og erstatt det med ordet'Overvåge' bruger gsub () funktion.
$ kat produkter.txt$ awk 'gsub (/ Printer /, "Monitor") print $ 0' produkter.txt
Følgende output produceres efter kørsel af ovenstående kommandoer. Den fjerde linje i filen indeholder ordet 'Printer'to gange og i output'Printer'er blevet erstattet af ordet'Overvåge''.
Konklusion
Mange symboler og funktioner kan bruges til at definere regex-mønstre til forskellige søge- og udskiftningsopgaver. Nogle symboler, der ofte bruges i regex-mønstre, anvendes i denne vejledning med kommandoen 'awk'.