Hoe tekst of string te filteren met Awk en reguliere expressies – Deel 1

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
Awk Prints All Lines in a File

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 
Awk Print Given Matching Line in a File

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
Use Awk to Print Matching Strings in a File

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
Use Awk to Match Strings in File

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
Use-Awk to Print Matching Character in File

Het volgende voorbeeld matcht strings die beginnen met K of k gevolgd door T:

# awk '/[Kk]T/{print}' /etc/hosts 
Use Awk to Print Matched String in File

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 
Use Awk To Print Matching Numbers in File

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
Use Awk to Print All Matching Lines with Pattern

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
Use Awk to Print Given Pattern String

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
Use Awk with Escape Character
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/