Om regularexpressions i egrep.

Skrivet av Zeph Grunschlag

egrep är en akronym för ”Extended Global Regular Expressions Print”. Det är ett program som skannar en angiven fil rad för rad och returnerar rader som innehåller ett mönster som matchar ett givet reguljärt uttryck.

Standardkommandot egrep ser ut så här:

egrep<flags> ’<regulärexpression>’ <filnamn>

Några vanliga flaggor är: -c för att räkna antalet lyckade träffar och inte skriva ut de faktiska träffarna, -i för att göra sökningen okänslig för stor- och små bokstäver, -n för att skriva ut radnumret före varje träff, -v för att ta komplementet till det reguljära uttrycket (dvs. återge de rader som inte stämmer) och -l för att skriva ut filnamnen på filer med rader som stämmer överens med uttrycket.

Reguljära uttryck finns i en egen egrep-variant (den här varianten liknar i mångt och mycket de reguljära uttryck som finns i emacs, perl, osv.)

(Den grekiska bokstaven ε (epsilon) representerar den tomma strängen)

En av de viktigaste skillnaderna mellan egrep reguljära uttryck och teoretiska reguljära uttryck är att i egrep får matchningar förekomma var som helst i strängen, medan matchningar i det teoretiska bruket alltid börjar från strängens första tecken och slutar vid det sista tecknet. I egrep ger det reguljära uttrycket 010 en matchning, men det teoretiska reguljära uttrycket 010 matchar inte 000001000 eftersom 010 och 000001000 inte är lika. Den teoretiska motsvarigheten till egreps 010 är (0+1)*010(0+1)*. Vad händer om du faktiskt vill ta hänsyn till början och slutet på strängar? egreppförser dig med caret-symbolen ^ för att ange början och dollarsymbolen $ för slutet. Så egreps motsvarighet till det teoretiska 010 ges av ^010$ .

Ett annat användbart egrepsymbolpar är ordgränserna \< och\> som anger början respektive slutet på ett ord.

För att ange en uppsättning eller ett intervall av tecken använder du hakparenteser. För att avbryta uppsättningen använder du hatsymbolen ^ som det första tecknet. Till exempel

  • är mängden { a, 9, A, 0, 5 }.
  • är den kompletterande uppsättningen ASCII – { a, 9, A, 0, 5 } (allt utom a, 9, A, 0 och 5).
  • är mängden av alla små bokstäver { a, b, c, d, …, z }.
  • är mängden av alla ASCII-bokstäver utom de små bokstäverna, siffrorna mellan 4 och 9 och de stora bokstäverna Q och R.

Några exempel:

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

match alla rader i searchfile.txt som börjar med en icke-tom bitsträng, följt av ett mellanslag, följt av ett icke-tomt bokstavsord som avslutar raden

Lämna ett svar

Din e-postadress kommer inte publiceras.