Wanneer we bepaalde commando’s in Linux uitvoeren om tekst uit een string of bestand te lezen of te bewerken, proberen we vaak de uitvoer te filteren naar een specifiek gedeelte van interesse. Hier komt het gebruik van reguliere expressies van pas.
Wat zijn reguliere expressies?
A regular expression can be defined as strings that represent several sequences of characters. One of the most important things about regular expressions is that they allow you to filter the output of a command or file, edit a section of a text or configuration file, and so on.
Kenmerken van reguliere expressies
Reguliere expressies zijn opgebouwd uit:
- Gewone tekens zoals spatie, underscore (_), A-Z, a-z, 0-9.
- Meta-tekens die worden uitgebreid tot gewone tekens, omvatten:
(.)
het komt overeen met elk enkel teken behalve een nieuwe regel.(*)
het komt overeen met nul of meer bestaan van het onmiddellijke teken ervoor.[karakter(s)]
het komt overeen met een van de gespecificeerde karakters in karakter(s), men kan ook een koppelteken(-)
gebruiken om een reeks karakters aan te geven zoals[a-f]
,[1-5]
, enzovoort.^
het komt overeen met het begin van een regel in een bestand.$
komt overeen met het einde van de regel in een bestand.\
het is een escape-teken.
Om tekst te filteren, moet men een tekstfiltertool zoals awk gebruiken. Je kunt awk beschouwen als een programmeertaal op zich. Maar voor het doel van deze gids voor het gebruik van awk, zullen we het behandelen als een eenvoudige command line filtering tool.
De algemene syntaxis van awk is:
awk 'script' filename
Waar 'script'
een reeks commando’s is die door awk begrepen worden en worden uitgevoerd op het bestand, bestandsnaam.
Het werkt door een gegeven regel in het bestand te lezen, een kopie van de regel te maken, en vervolgens het script op de regel uit te voeren. Dit wordt herhaald voor alle regels in het bestand.
Het 'script'
is in de vorm '/patroon/ actie'
waar het patroon een reguliere expressie is en de actie is wat awk zal doen wanneer het het opgegeven patroon in een regel vindt.
Hoe de Awk Filtering Tool te Gebruiken in Linux
In de volgende voorbeelden zullen we ons concentreren op de metakarakters die we hierboven hebben besproken onder de functies van awk.
Alle regels afdrukken vanuit het bestand Gebruikmakend van Awk
Het onderstaande voorbeeld drukt alle regels in het bestand /etc/hosts af omdat er geen patroon is opgegeven.
awk '//{print}'/etc/hosts

Gebruik Awk Patronen: Overeenkomstige regels met ‘localhost’ in Bestand
In het onderstaande voorbeeld is een patroon localhost
gegeven, dus awk zal de regel matchen die localhost bevat in het bestand /etc/hosts
.
awk '/localhost/{print}' /etc/hosts

Het gebruik van Awk met (.) Jokerteken in een Patroon
De (.)
zal strings matchen die loc, localhost, localnet bevatten in het onderstaande voorbeeld.
Dat wil zeggen * l een_enkel_teken c *.
awk '/l.c/{print}' /etc/hosts

Het gebruik van Awk met (*) Teken in een Patroon
Het zal strings matchen die localhost, localnet, lijnen, in staat, zoals in het onderstaande voorbeeld:
awk '/l*c/{print}' /etc/localhost

Je zult ook merken dat (*)
probeert de langste mogelijke match te krijgen die het kan detecteren.
Laten we eens kijken naar een geval dat dit aantoont, neem de reguliere expressie t*t
wat betekent het matchen van strings die beginnen met de letter t
en eindigen met t
in de onderstaande regel:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
Je krijgt de volgende mogelijkheden wanneer je het patroon /t*t/
gebruikt:
this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
En (*)
in /t*t/
jokerteken laat awk toe de laatste optie te kiezen:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Het gebruik van Awk met set [ karakter(s) ]
Neem bijvoorbeeld de set [al1]
, hier zal awk alle strings matchen die het karakter a
of l
of 1
bevatten in een regel in het bestand /etc/hosts.
awk '/[al1]/{print}' /etc/hosts

Het volgende voorbeeld matcht strings die beginnen met K
of k
gevolgd door T
:
# awk '/[Kk]T/{print}' /etc/hosts

Specificeren van tekens in een bereik
Begrijp tekens met awk:
[0-9]
betekent een enkel nummer[a-z]
betekent overeenkomen met een enkele kleine letter[A-Z]
betekent overeenkomen met een enkele hoofdletter[a-zA-Z]
betekent overeenkomen met een enkele letter[a-zA-Z 0-9]
betekent overeenkomen met een enkele letter of nummer
Laten we hieronder een voorbeeld bekijken:
awk '/[0-9]/{print}' /etc/hosts

Alle regels uit het bestand /etc/hosts bevatten ten minste een enkel nummer [0-9]
in het bovenstaande voorbeeld.
Gebruik Awk met (^) Meta-teken
Het komt overeen met alle regels die beginnen met het opgegeven patroon zoals in het onderstaande voorbeeld:
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts

Gebruik Awk met ($) Meta-teken
Het komt overeen met alle regels die eindigen met het opgegeven patroon:
awk '/ab$/{print}' /etc/hosts awk '/ost$/{print}' /etc/hosts awk '/rs$/{print}' /etc/hosts

Gebruik Awk met (\) Escape-teken
Hiermee kunt u het teken dat erop volgt als een letterlijke waarde beschouwen, dat wil zeggen het gewoon zoals het is beschouwen.
In het onderstaande voorbeeld drukt het eerste commando alle regels in het bestand af, en het tweede commando drukt niets af omdat ik een regel wil overeenkomen die $25.00 bevat, maar er wordt geen escape-teken gebruikt.
Het derde commando is correct omdat er een escape-teken is gebruikt om $ te lezen zoals het is.
awk '//{print}' deals.txt awk '/$25.00/{print}' deals.txt awk '/\$25.00/{print}' deals.txt

Samenvatting
Dit is niet alles met de awk opdrachtregelfiltertool, de bovenstaande voorbeelden zijn de basisbewerkingen van awk. In de volgende delen zullen we verder gaan met het gebruik van complexe functies van awk.
Bedankt voor het lezen en voor eventuele toevoegingen of verduidelijkingen, plaats een opmerking in de opmerkingen sectie
Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/