Cercare nei file – Il comando grep

In questa lezione tratteremo di un comando che ritengo davvero utilisso: il comando grep.

Grazie a questa potente parolina magica è infatti possibile effettuare ricerche complesse sui file al fine di verificare che contengano o meno determinate frasi o parole.

Facciamo un esempio: poniamo di voler sapere se all’interno del file “spesa.txt” è presente la parola “zucchero”.

grep “zucchero” spesa.txt

Sulla base di questa istruzione grep restituirà tutte le linee del file indicato che contengono la parola cercata.
Ovviamente, visto così, potrebbe non sembrare un granchè… allora facciamo qualche altro esempio e poniamo di voler cercare la parola zucchero tra tutti i file presenti in una data directory e nelle sue eventuali sub-directory:

grep -r “zucchero” /home/listespesa/

Nell esempio qui sopra abbiamo utilizzato grep con opzione ricorsiva (-r) per andare a scovare, non solo nella dir indicata ma anche in tutte le eventuali sub-directory, la presenza di file contenenti la parola indicata. Ma la vera forza di grep sta nel suo utilizzo combinato con le regular expressions (espressioni regolari).
Non credo sia il caso di affrontare esaustivamente l’argomento (troppo lungo e complesso ai fini del nostro corso) tuttavia ritengo opportuno un cenno a due caratteri particolari che, sono certo, saranno amici di molte vostre ricerche… sto parlando di “.” e “*”.

Il punto (.) può essere utilizzato per indicare un (nota bene: uno) carattere qualsiasi. facciamo un esempio: poniamo di aver archiviato sul nostro computer le recensioni di centinaia di film visti in TV. Poniamo che ogni scheda sia stata scritta in un separato file txt. Ora poniamo di voler cercare tra queste schede tutti i film di “Michelle Pfeiffer” ma supponiamo di non ricordare esattamente come si scrive “Pfeiffer”.

Cosa fare?

Semplice… scriviamo solo la parte di parola di cui siamo certi e sostituiamo con dei puntini le lettere di cui non siamo sicuri, così:

grep -r “pf..ffer” /home/videoteca/

Nell’esempio abbiamo messo due punti i quali indicano le lettere “ei” di cui non siamo sicuri.
Ma possiamo fare ancora di più. Poniamo di ricordare solo che il nome finisce con “ffer” e niente più:

grep -r “*ffer” /home/videoteca/

Questa istruzione ritornerà tutti i file in cui è presente una qualsiasi parola che finisce con “ffer” in quanto il simbolo asterisco (*) indica non uno, bensì un arbitrario numero di lettere (0,1,2,10,100,…).
Ovviamente quelle viste sopra sono dabbero ben poca cosa rispetto alle vere capacità di grep, tuttavia preferisco rimandare l’approfondimento dell’argomento a futuri tutorial, ritenendo sufficiente l’avervi introdotto il comando di cui potete già fare interessante uso.