Zelfstudie over reguliere expressies van Linux: Grep Regex-voorbeeld

โšก Slimme samenvatting

Linux-reguliere expressies zijn speciale tekenreeksen die gegevens doorzoeken en complexe patronen matchen in tools zoals grep, sed en vi. Ze gebruiken basis-, interval-, uitgebreide en brace-expansievormen om tekst nauwkeurig te filteren.

  • ๐Ÿ”Ž Wat zij zijn: Reguliere expressies, afgekort tot regexp of regex, beschrijven tekstpatronen voor het zoeken en matchen ervan.
  • ๐Ÿงฉ Basisset: Symbolen zoals . ^ $ * en \ verankeren, herhalen en escapen tekens in een patroon.
  • ๐Ÿ”ข Interval: Haakjes zoals {n} en {n,m} bepalen hoe vaak het voorgaande teken wordt herhaald.
  • โž• Extended: Met grep -E komen \+ en \? overeen met รฉรฉn of meer en nul of รฉรฉn voorkomende tekens.
  • ๐Ÿงต Uitbreiding van de brace: Krullende accolades genereren meerdere tekenreeksen uit een reeks of een door komma's gescheiden lijst.
  • ๏ธ Waar gebruikt: Programma's zoals grep, sed, tr en vi gebruiken reguliere expressies om tekst te filteren.
  • ๐Ÿค– AI-ondersteuning: AI-assistenten en GitHub Copilot kunnen snel reguliere expressiepatronen genereren, uitleggen en debuggen.

Linux reguliere expressies met grep โ€” basis-, interval- en uitgebreide regex-voorbeelden

Reguliere expressies zijn een van de krachtigste functies van Linux Teksttools waarmee u gegevens kunt matchen, filteren en transformeren met compacte patronen. Deze pagina legt de basis-, interval- en uitgebreide vormen uit, evenals de uitbreiding met accolades, met uitgewerkte grep-voorbeelden.

Wat zijn Linux reguliere expressies?

Reguliere expressies in Linux zijn speciale tekens die helpen bij het zoeken in gegevens en het matchen van complexe patronen. Reguliere expressies worden afgekort tot 'regexp' of 'regex'. Ze worden gebruikt in veel Linux-programma's, zoals... grepbash, rename, sed en meer.

Soorten reguliere expressies

Laten we, om het beter te begrijpen, de verschillende soorten reguliere expressies รฉรฉn voor รฉรฉn bekijken. Deze pagina behandelt basis-, interval- en uitgebreide reguliere expressies en sluit af met de uitbreiding van reguliere expressies met accolades.

Basis reguliere expressies

Enkele veelgebruikte commando's die met reguliere expressies werken zijn tr, sed, vien grep. De onderstaande tabel geeft een overzicht van enkele basisreguliere expressies.

Symbool Beschrijving
. Vervangt elk willekeurig teken
^ Komt overeen met het begin van een tekenreeks.
$ Komt overeen met het einde van een tekenreeks.
* Komt nul of meer keer overeen met het voorgaande teken.
\ Vertegenwoordigt speciale tekens
() Groepeert reguliere expressies
? Komt exact overeen met รฉรฉn teken.

Laten we een voorbeeld bekijken. Voer eerst `cat sample` uit om de inhoud van een bestaand bestand weer te geven, zoals hieronder te zien is.

Het `cat`-commando toont de inhoud van een bestaand bestand in de terminal.

Zoek vervolgens naar inhoud die de letter 'a' bevat. De onderstaande schermafbeelding laat zien hoe grep alle regels retourneert die een 'a' bevatten.

grep zoekt in het voorbeeldbestand naar regels die de letter a bevatten.

Het dakje '^' komt overeen met het begin van een tekenreeks. Het onderstaande voorbeeld zoekt naar inhoud die begint met de letter 'a'.

grep met een caret-anker dat alleen regels vindt die beginnen met de letter a

Alleen regels die met het teken 'a' beginnen, worden gefilterd. Regels die niet met 'a' beginnen, worden genegeerd.

Laten we eens naar een ander voorbeeld kijken. De onderstaande schermafbeelding toont opnieuw de inhoud van het voorbeeldbestand voordat er gefilterd wordt op het einde van een regel.

Voorbeeld van de inhoud van een bestand, weergegeven vรณรณr het filteren van regels die eindigen op de letter t.

Selecteer alleen de regels die eindigen op de letter 't' door het anker '$' te gebruiken, zoals hieronder weergegeven.

grep met een dollarteken als anker, waarbij alleen regels worden geselecteerd die eindigen op de letter t

Interval Reguliere expressies

Deze uitdrukkingen specificeren het aantal keren dat een teken in een tekenreeks voorkomt. Ze staan โ€‹โ€‹hieronder vermeld.

Expressie Beschrijving
{N} Komt exact overeen met het voorgaande teken dat 'n' keer voorkomt
{n,m} Komt overeen met het voorgaande teken dat 'n' keer voorkomt, maar niet meer dan m
{N, } Komt alleen overeen met het voorgaande teken als dit 'n' keer of vaker voorkomt

Filter bijvoorbeeld alle regels eruit die de letter 'p' bevatten. De onderstaande schermafbeelding toont de overeenkomende regels.

Het filteren van het voorbeeldbestand met grep op regels die het teken p bevatten

Controleer nu of de letter 'p' precies twee keer achter elkaar in een tekenreeks voorkomt. De syntax hiervoor is:

cat sample | grep -E p\{2}

Het resultaat van de intervalwedstrijd wordt hieronder weergegeven.

grep -E interval expressie die overeenkomt met het teken p dat precies twee keer voorkomt

Opmerking: bij deze reguliere expressies moet u -E toevoegen.

Uitgebreide reguliere expressies

Deze reguliere expressies combineren meer dan รฉรฉn expressie. Enkele voorbeelden zijn:

Expressie Beschrijving
\+ Komt overeen met een of meer exemplaren van het vorige teken
\? Komt overeen met nul of รฉรฉn keer dat het vorige teken voorkomt

Zoek bijvoorbeeld naar alle voorkomende gevallen van de letter 't'. De onderstaande schermafbeelding toont het resultaat.

grep doorzoekt het voorbeeldbestand naar alle regels die het teken 't' bevatten.

Stel dat u regels wilt filteren waarin de letter 'a' vรณรณr de letter 't' staat. U kunt hiervoor een opdracht gebruiken zoals hieronder:

cat sample|grep "a\+t"

Het resultaat wordt weergegeven in de volgende schermafbeelding.

grep uitgebreide expressie die overeenkomt met een of meer a-tekens gevolgd door t

Uitbreiding van de beugel

De syntaxis voor het uitbreiden van haakjes is een reeks of een door komma's gescheiden lijst van items tussen accolades '{}'. Het begin en einde van een reeks worden gescheiden door twee punten '..'.

Enkele voorbeelden worden hieronder weergegeven.

echo-opdracht met behulp van brace-expansie om meerdere tekenreeksen te genereren uit een reeks en een lijst

In de bovenstaande voorbeelden maakt het echo-commando tekenreeksen aan met behulp van accolade-expansie, waardoor meerdere tekenreeksen uit รฉรฉn enkel patroon worden gegenereerd.

Veelgestelde vragen

grep gebruikt standaard basisreguliere expressies. egrep maakt uitgebreidere expressies mogelijk (hetzelfde als grep -E), en fgrep zoekt naar vaste tekenreeksen zonder reguliere expressie (grep -F). De moderne GNU grep markeert egrep en fgrep als verouderd, dus geef de voorkeur aan grep -E en grep -F.

Tekenklassen komen overeen met een categorie tekens. Haakjesuitdrukkingen zoals [az] komen overeen met een bereik, terwijl POSIX-klassen zoals [[:alpha:]], [[:digit:]] en [[:space:]] overeenkomen met letters, cijfers en witruimte. Ze zorgen ervoor dat patronen leesbaar en overdraagbaar blijven in verschillende talen.

Voeg de optie -i toe, bijvoorbeeld grep -i โ€œhelloโ€ sample. Dit komt overeen met Hello, HELLO en hello. Zonder -i zijn reguliere expressies hoofdlettergevoelig, waardoor een hoofdletter en de bijbehorende kleine letter als twee verschillende tekens worden behandeld.

Shell-jokertekens (globbing) breiden bestandsnamen uit, waarbij * staat voor elk willekeurig teken en ? voor รฉรฉn teken. Reguliere expressies matchen tekst in bestanden, waarbij * staat voor nul of meer van het voorgaande teken. Dezelfde symbolen hebben in elke context een andere betekenis.

Gebruik de optie -o, bijvoorbeeld grep -o โ€œa\+tโ€ sample. In plaats van de hele regel af te drukken, drukt grep alleen het gedeelte af dat overeenkomt met het patroon, รฉรฉn overeenkomst per regel. Dit is handig voor bijvoorbeeld...trachet opslaan van waarden zoals e-mailadressen of telefoonnummers.

Gebruik alternatie met het pipe-symbool. In de uitgebreide modus zoekt grep -E โ€œcat|dogโ€ sample naar regels die 'cat' of 'dog' bevatten. In de basismodus moet je het escapen als grep โ€œcat\|dogโ€ sample. Met alternatie kan รฉรฉn commando naar meerdere patronen tegelijk zoeken.

AI-assistenten kunnen een beschrijving in begrijpelijke taal omzetten in een werkende reguliere expressie, uitleggen wat een cryptisch patroon doet en oplossingen suggereren wanneer een overeenkomst mislukt. Machine learning-tools detecteren ook terugkerende patronen in grote logbestanden die te omslachtig zouden zijn om handmatig te schrijven.

Ja. GitHub-copiloot Deze functie suggereert grep-opdrachten en reguliere expressies direct vanuit een opmerking of een gedeeltelijk patroon terwijl u typt. Dit versnelt het schrijven van complexe expressies, maar u moet elk gegenereerd patroon wel testen met echte voorbeeldgegevens voordat u erop vertrouwt.

Vat dit bericht samen met: