Een reguliere expressie (regex) wordt gebruikt om een bepaalde reeks tekens in een bestand te vinden. Symbolen zoals letters, cijfers en speciale tekens kunnen worden gebruikt om het patroon te definiëren. Verschillende taken kunnen eenvoudig worden voltooid door regex-patronen te gebruiken. In deze zelfstudie laten we u zien hoe u regex-patronen kunt gebruiken met het 'awk'-commando.
De basistekens die in patronen worden gebruikt
Er kunnen veel tekens worden gebruikt om een regex-patroon te definiëren. De karakters die het meest worden gebruikt om regex-patronen te definiëren, worden hieronder gedefinieerd:.
Karakter | Omschrijving |
---|---|
. | Overeenkomen met elk teken zonder een nieuwe regel (\n) |
\ | Citeer een nieuw meta-karakter |
^ | Overeenkomen met het begin van een regel |
$ | Overeenkomen met het einde van een regel |
| | Definieer een alternatief |
() | Definieer een groep |
[] | Definieer een tekenklasse |
\w | Overeenkomen met elk woord |
\s | Overeenkomen met elk witruimteteken |
\d | Overeenkomen met elk cijfer |
\b | Overeenkomen met elke woordgrens |
Maak een bestand
Om deze tutorial te volgen, maakt u een tekstbestand met de naam producten.tekst. Het bestand moet vier velden bevatten: ID, Naam, Type en Prijs.
ID Naam Type Prijs
p1001 15-inch monitormonitor $ 100
p1002 A4tech Muis Muis $10
p1003 Samsung-printerprinter $ 50
p1004 HP scannerscanner $ 60
p1005 Logitech Muis Muis $15
Voorbeeld 1: Definieer een regex-patroon met behulp van de tekenklasse
De volgende 'awk'-opdracht zoekt en drukt regels af die het teken 'n' bevatten, gevolgd door de tekens 'er'.
$ kattenproducten.tekst$ awk '/[n][er]/ print $0' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. De uitvoer toont de lijn die overeenkomt met het patroon. Hier komt slechts één regel overeen met het patroon.
Voorbeeld 2: Definieer een regex-patroon met het '^'-symbool
De volgende 'awk'-opdracht zoekt en drukt regels af die beginnen met het teken 'p' en het cijfer 3 . bevatten.
$ kattenproducten.tekst$ awk '/^p.*3/ print $0' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. Hier is er één regel die overeenkomt met het patroon.
Voorbeeld 3: Definieer een regex-patroon met behulp van de gsub-functie
De gsub() functie wordt gebruikt om globaal te zoeken naar en tekst te vervangen. De volgende 'awk'-opdracht zoekt naar het woord 'Scanner' en vervangt dit door het woord 'Router' voordat het resultaat wordt afgedrukt.
$ kattenproducten.tekst$ awk 'gsub(/Scanner/, "Router")' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. Er is één regel met het woord 'Scanner', en 'Scanner' wordt vervangen door het woord 'Router' voordat de regel wordt afgedrukt.
Voorbeeld 4: Definieer een regex-patroon met '*'
De volgende 'awk'-opdracht zoekt en drukt elke tekenreeks af die begint met 'Mo' en elk volgend teken bevat.
$ kattenproducten.tekst$ awk '/Mo*/ print $0' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. Drie lijnen komen overeen met het patroon: twee lijnen bevatten het woord 'Muis' en een regel bevat het woord 'Monitor'.
Voorbeeld 5: Definieer een regex-patroon met het '$'-symbool
De volgende 'awk'-opdracht zoekt naar regels in het bestand en drukt deze af die eindigen op het cijfer 5.
$ kattenproducten.tekst$ awk '/5$/ print $0' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. Er is slechts één regel in het bestand die eindigt met het cijfer 5.
Voorbeeld 6: Definieer een regex-patroon met de '^' en '|' symbolen
De '^' symbool geeft het begin van een regel aan, en het '|' symbool geeft een logische OR-instructie aan. De volgende 'awk'-opdracht zoekt en drukt regels af die beginnen met het teken 'p' en bevatten ofwel 'Scanner' of 'Muis'.
$ kattenproducten.tekst$ awk '/^p.* (Scanner|Muis)/' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. De uitvoer laat zien dat twee regels het woord ' bevattenMuis' en een regel bevat het woord 'Scanner'. De drie regels beginnen met het teken 'p'.
Voorbeeld 7: Definieer een regex-patroon met het '+'-symbool
De '+' operator wordt gebruikt om ten minste één overeenkomst te vinden. De volgende 'awk'-opdracht zoekt en drukt regels af die het teken ' bevattennee' ten minste een keer.
$ kattenproducten.tekst$ awk '/n+/print' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. Hier, het personage 'nee' bevat komt minstens één keer voor in de regels die de woorden bevatten Monitor, printer en scanner.
Voorbeeld 8: Definieer een regex-patroon met de functie gsub()
Het volgende 'awk'-commando zoekt globaal naar het woord 'Printer' en vervang het door het woord 'Monitor' de ... gebruiken gsub() functie.
$ kattenproducten.tekst$ awk 'gsub(/Printer/, “Monitor”) print$0' producten.tekst
De volgende uitvoer wordt geproduceerd na het uitvoeren van de bovenstaande opdrachten:. De vierde regel van het bestand bevat het woord 'Printer' tweemaal, en in de uitvoer, 'Printer' is vervangen door het woord 'Monitor'.
Conclusie
Veel symbolen en functies kunnen worden gebruikt om regex-patronen te definiëren voor verschillende zoek- en vervangingstaken. Sommige symbolen die vaak worden gebruikt in regex-patronen worden in deze tutorial toegepast met het 'awk'-commando.