Regulāra izteiksme (regex) tiek izmantota, lai failā atrastu noteiktu rakstzīmju secību. Modeļa definēšanai var izmantot tādus simbolus kā burti, cipari un īpašās rakstzīmes. Dažādus uzdevumus var viegli izpildīt, izmantojot regex modeļus. Šajā apmācībā mēs parādīsim, kā izmantot regex modeļus ar komandu 'awk'.
Modeļos izmantotās pamata rakstzīmes
Regex modeļa definēšanai var izmantot daudzas rakstzīmes. Rakstzīmes, ko visbiežāk izmanto regex modeļu definēšanai, ir definētas zemāk.
Raksturs | Apraksts |
---|---|
. | Pielāgojiet jebkuru rakstzīmi bez jaunas rindas (\ n) |
\ | Citēt jaunu meta varoni |
^ | Sakrīt ar rindas sākumu |
$ | Atbilst rindas beigām |
| | Definējiet aizstājēju |
() | Definējiet grupu |
[] | Definējiet rakstzīmju klasi |
\ w | Sakrīt ar jebkuru vārdu |
\ s | Saskaņojiet jebkuru atstarpes rakstzīmi |
\ d | Saskaņojiet jebkuru ciparu |
\ b | Saskaņojiet jebkuru vārdu robežu |
Izveidojiet failu
Lai sekotu līdzi šai apmācībai, izveidojiet teksta failu ar nosaukumu produktiem.txt. Failā jābūt četriem laukiem: ID, nosaukums, tips un cena.
ID Nosaukums Tips Cena
p1001 15 "monitora monitors 100 ASV dolāri
p1002 peles A4tech pele 10 USD
p1003 Samsung printera printeris 50 USD
p1004 HP skenera skeneris 60 USD
p1005 Logitech peles pele 15 USD
1. piemērs: definējiet regex paraugu, izmantojot rakstzīmju klasi
Sekojošā komanda “awk” meklēs un izdrukās līnijas, kurās ir raksturs “n”, kam seko rakstzīmes “er”.
$ kaķu produkti.txt$ awk '/ [n] [er] / print $ 0' produktus.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Izvade parāda līniju, kas atbilst paraugam. Šeit modelim atbilst tikai viena līnija.
2. piemērs: definējiet regex paraugu, izmantojot simbolu '^'
Sekojošā komanda “awk” meklēs un izdrukās līnijas, kas sākas ar burtu “p” un ietver skaitli 3.
$ kaķu produkti.txt$ awk '/ ^ lpp.* 3 / print $ 0 'produkti.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Šeit ir viena līnija, kas atbilst paraugam.
3. piemērs: definējiet regex paraugu, izmantojot funkciju gsub
The gsub () funkciju izmanto, lai globāli meklētu un aizstātu tekstu. Šī komanda “awk” pirms rezultāta izdrukāšanas meklēs vārdu “Skeneris” un aizstās to ar vārdu “Maršrutētājs”.
$ kaķu produkti.txt$ awk 'gsub (/ Scanner /, "Router")' produkti.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Ir viena rinda, kurā ir vārds 'Skeneris', un 'Skeneris"aizstāj ar vārdu"Maršrutētājspirms rindas drukāšanas.
4. piemērs: definējiet regex modeli ar '*'
Sekojošā komanda “awk” meklēs un izdrukās visas virknes, kas sākas ar “Mo” un ietver visas turpmākās rakstzīmes.
$ kaķu produkti.txt$ awk '/ Mo * / print $ 0' produktus.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Trīs līnijas atbilst modelim: divās līnijās ir vārds "Pele"un vienā rindā ir vārds"Monitor".
5. piemērs: definējiet regex paraugu, izmantojot simbolu '$'
Sekojošā komanda “awk” meklēs un izdrukās rindas failā, kas beidzas ar skaitli 5.
$ kaķu produkti.txt$ awk '/ 5 $ / print $ 0' produktus.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Failā ir tikai viena rinda, kas beidzas ar skaitli 5.
6. piemērs: definējiet regex paraugu, izmantojot “^” un “|” simboli
The '^simbols norāda līnijas sākumu un|'simbols norāda loģisku VAI priekšrakstu. Šī komanda 'awk' meklēs un izdrukās līnijas, kas sākas ar rakstzīmi 'lpp"un satur vai nu"Skeneris"vai"Pele".
$ kaķu produkti.txt$ awk '/ ^ lpp.* (Skeneris | Pele) / 'produkti.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Rezultāts parāda, ka divās rindās ir vārds 'Pele"un vienā rindā ir vārds"Skeneris". Trīs rindas sākas ar rakstzīmi 'lpp".
7. piemērs: definējiet regex paraugu, izmantojot simbolu “+”
The '+'Operators tiek izmantots, lai atrastu vismaz vienu atbilstību. Šī komanda 'awk' meklēs un izdrukās līnijas, kurās ir rakstzīme 'n' vismaz vienreiz.
$ kaķu produkti.txt$ awk '/ n + / print' produkti.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Šeit rakstursn'satur satur vismaz vienu reizi rindās, kurās ir vārdi Monitoru, printeri un skeneri.
8. piemērs: definējiet regex paraugu, izmantojot funkciju gsub ()
Šī komanda “awk” globāli meklēs vārdu “Printeris"un aizstāj to ar vārdu"Monitor' izmantojot gsub () funkcija.
$ kaķu produkti.txt$ awk 'gsub (/ Printer / "Monitor") print $ 0' produkti.txt
Pēc iepriekš minēto komandu izpildīšanas tiks izveidota šāda izeja. Faila ceturtajā rindā ir vārds “Printeris"divreiz un izlaidumā"Printeris"ir aizstāts ar vārdu"Monitor".
Secinājums
Daudzus simbolus un funkcijas var izmantot, lai definētu regex modeļus dažādiem meklēšanas un aizvietošanas uzdevumiem. Daži simboli, kas parasti tiek izmantoti regex modeļos, šajā apmācībā tiek izmantoti ar komandu 'awk'.