Sulle espressioni regolari in egrep.

Scritto da Zeph Grunschlag

egrep è un acronimo per “Extended Global Regular Expressions Print”. È un programma che analizza un file specificato riga per riga, restituendo le righe che contengono uno schema corrispondente a una data espressione regolare.

Il comando standard egrep assomiglia a:

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

Alcuni flag comuni sono: -c per contare il numero di corrispondenze riuscite e non stampare le corrispondenze effettive, -i per rendere la ricerca insensibile alle maiuscole e alle minuscole, -n per stampare il numero di linea prima della stampa di ogni corrispondenza, -v per prendere il complemento dell’espressione regolare (cioè restituire le linee che non corrispondono), e -l per stampare i nomi dei file con linee che corrispondono all’espressione.

Le espressioni regolari hanno la loro variante egrep (questa è molto simile alle espressioni regolari che si trovano in emacs, perl, ecc.)

(La lettera greca ε (epsilon) rappresenta la stringa vuota)

Una delle principali differenze tra le espressioni regolari egrep e le espressioni regolari teoriche è che in egrep, le corrispondenze possono avvenire ovunque nella stringa, mentre nell’uso teorico, le corrispondenze iniziano sempre dal primo carattere della stringa e finiscono all’ultimo carattere. Per esempio, si consideri la stringa 000001000. In egrep, l’espressione regolare 010 dà una corrispondenza; d’altra parte, l’espressione regolare teorica 010 non corrisponde a 000001000 perché 010 e 000001000 non sono uguali. L’equivalente teorico della 010 di egrep è (0+1)*010(0+1)*. Cosa succede se volete considerare l’inizio e la fine delle stringhe? egrep vi fornisce il simbolo del cursore ^ per specificare l’inizio, e il simbolo del dollaro $ per la fine. Così l’equivalente egrep del teorico 010 è dato da ^010$ .

Un’altra utile coppia di simboli egrep sono i limiti di parola \< e \5567> che denotano rispettivamente l’inizio e la fine di una parola.

Per specificare un insieme o una gamma di caratteri usate le parentesi graffe. Per indicare l’insieme, usate il simbolo del cappello ^ come primo carattere. Per esempio

  • è l’insieme { a, 9, A, 0, 5 }
  • è l’insieme complementare ASCII – { a, 9, A, 0, 5 } (tutto tranne a, 9, A, 0 e 5).
  • è l’insieme di tutte le lettere minuscole { a, b, c, d, …, z }
  • è l’insieme di tutte le lettere ASCII tranne le lettere minuscole, i numeri tra 4 e 9, e le lettere maiuscole Q e R.

Alcuni esempi:

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

cerca tutte le linee in searchfile.txt che iniziano con una stringa di bit non vuota, seguita da uno spazio, seguita da una parola alfabetica non vuota che finisce la linea

.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.