Over reguliere expressies in egrep.

Geschreven door Zeph Grunschlag

egrepis een acroniem voor “Extended Global Regular Expressions Print”. Het is een programma dat een opgegeven bestand regel voor regel scant, waarbij regels worden teruggegeven die een patroon bevatten dat overeenkomt met een bepaalde reguliere expressie.

Het standaard egrep-commando ziet er als volgt uit:

egrep<flags> ‘<regularexpression>’ <filename>

Een aantal veelvoorkomende vlaggen zijn: -c om het aantal succesvolle overeenkomsten te tellen en niet de eigenlijke overeenkomsten af te drukken, -i om het zoeken hoofdletterongevoelig te maken, -n om het regelnummer voor elke overeenkomst af te drukken, -v om het complement van de reguliere uitdrukking te nemen (d.w.z. de regels terug te geven die niet overeenkomen), en -l om de bestandsnamen af te drukken van bestanden met regels die overeenkomen met de uitdrukking.

Reguliere uitdrukkingen hebben hun eigen egrep-variant (deze lijkt erg op de reguliere uitdrukkingen die in emacs, perl, enz. worden gebruikt.)

(De Griekse letter ε (epsilon) staat voor de lege string)

Eén van de belangrijkste verschillen tussen egrep reguliere expressies en theoretische reguliere expressies is dat in egrep, matches overal in de string mogen voorkomen, terwijl in het theoretische gebruik, matches altijd beginnen bij het eerste karakter van de string en eindigen bij het laatste karakter. Bijvoorbeeld, neem de string 000001000.In egrep, geeft de reguliere uitdrukking 010 een overeenkomst; aan de andere kant, de theoretische reguliere uitdrukking 010 komt niet overeen met 000001000, omdat 010 en 000001000 niet gelijk zijn. Het theoretische equivalent van egrep’s 010 is (0+1)*010(0+1)*. Wat als je eigenlijk het begin en einde van strings wilt beschouwen? egrep geeft je het caret symbool ^ voor het specificeren van het begin, en het dollar symbool $ voor het einde. Dus het egrep equivalent van het theoretische 010 wordt gegeven door ^010$ .

een ander bruikbaar egrep-symboolpaar zijn de woordgrenzen < en > die respectievelijk het begin en het einde van een woord aanduiden.

Om een reeks of bereik van tekens te specificeren gebruikt u accolades. Om de reeks aan te geven gebruikt u het hoed-symbool ^ als eerste teken. Bijvoorbeeld

  • is de verzameling { a, 9, A, 0, 5 }
  • is de complementaire set ASCII – { a, 9, A, 0, 5 } (alles behalve a, 9, A, 0 en 5).
  • is de verzameling van alle kleine letters { a, b, c, d, …, z }
  • is de verzameling van alle ASCII-letters behalve de kleine letters, de cijfers tussen 4 en 9, en de hoofdletters Q en R.

Een paar voorbeelden:

  • egrep ‘^(0|1)+ +$’ searchfile.txt

alle regels in searchfile.txt die beginnen met een niet-lege bitstring, gevolgd door een spatie, gevolgd door een niet-leeg alfabetisch woord dat de regel afsluit

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.