Il comando grep può anche essere utilizzato con le cosiddette espressioni regolari. Le espressioni regolari sono formate da lettere o numeri abbinati a caratteri speciali che grep interpreta in modo particolare. Questi caratteri speciali, chiamati anche metacaratteri, hanno un significato particolare anche per il sistema; è perciò necessario digitarli tra virgolette o farli precedere da un carattere di escape. Per utilizzare grep con un'espressione regolare al prompt di sistema, inserire l'espressione tra virgolette o utilizzare i metacaratteri (& ! . * $ ? e \) preceduti da una barra rovesciata (\).
$ grep '^b' lista |
cercherà tutte le righe del file lista che iniziano con "b."
$ grep 'b$' lista |
visualizzerà tutte le righe del file lista in cui l'ultimo carattere è una "b". Il comando:
$ grep '^b$' lista |
visualizzerà tutte le righe del file lista che contengono solo il carattere "b".
All'interno di un'espressione regolare, un punto (.) sostituisce qualsiasi carattere singolo. Ad esempio, il comando:
$ grep 'de.' lista |
estrae dal file lista tutti i gruppi di tre caratteri in cui "de" siano i primi due, ad esempio "dei", "del", "scodella" e "code" (anche gli spazi vuoti sono considerati caratteri).
Se un carattere è seguito da un asterisco (*), grep lo interpreta come "nessuna o più ricorrenze di quel carattere". Se l'asterisco è posto dopo un'espressione regolare, grep lo interpreta come "nessuna o più ricorrenze dei caratteri corrispondenti al modello di ricerca".
Il fatto che grep possa individuare anche i casi di "nessuna ricorrenza" di un carattere o di un modello di ricerca rende l'uso dell'asterisco poco intuitivo. Volendo ad esempio ricercare tutte le parole che contengano le lettere "qu", il comando:
$ grep 'qu*' lista |
produrrà l'effetto desiderato. Se tuttavia si vogliono ricercare tutte le parole che contengano la lettera "n", il comando dovrà avere la forma seguente:
$ grep 'nn*' lista |
Per ricercare tutte le parole che contengano il modello "nn", il comando da inserire sarà il seguente:
$ grep 'nnn*' lista |
Per comprendere meglio questa funzione di grep può essere opportuno effettuare alcune prove ed esaminare l'output dei comandi.
Per ricercare nessuna o più ricorrenze di un qualsiasi carattere del file lista, digitare:
$ grep .* lista |