grep (GNU Regular Expression Parser) è un utilissimo programma per analizzare testi. A cosa serve analizzare un testo? per esempio: trovare tutti i documenti di testo dentro ad un disco o ad una directory in cui compare la parola “mail”, quando non abbiamo la più pallida idea di dove sia. Qui in realtà occorre un concorso di programmi: uno che fa la scansione dell’albero di filesystem e, in pipe, quello che analizza il file correntemente puntato dal primo programma.
Ad esempio mi pongo in una certa directory e lancio il programma
$ find . -name "*php" -exec grep -H "mail" {} \;
Il programma che scansiona l’albero da quel punto “.” in giù, alla ricerca di tutti i file che finiscono per php è find.
Il programma che analizza ogni singolo file ritornato da find è grep.
Ma concertiamoci su grep. Molti di voi lo sapranno già, ma io me ne sono reso conto stamattina. Il programma grep ha delle limitazioni abbastanza forti.
Ad esempio, questo comando dovrebbe ritornare 012, e invece non ritorna nulla:
$ echo 012 | grep "[0-9]+" $
Eppure l’espressione regolare recita “una o più cifre”.
Magicamente ho scoperto che invece il comando egrep (extended grep) fa il suo lavoro:
$ echo 012 | grep "[0-9]+" 012
Cercando in rete questa cosa viene citata come una limitazione di grep. È tutto.
Commenti recenti