alex@goku:~$ echo -e "1 - pippo pluto paperino\n2 - pluto minni" | grep "pluto" | grep "minni" 2 - pluto minni
Una soluzione più elegante è di farlo in un unico comando coivolgendo le espressioni regolari:
alex@goku:~$ echo -e "1 - pippo pluto paperino\n2 - pluto minni" 1 - pippo pluto paperino 2 - pluto minni alex@vegeta:~$ echo -e "1 - pippo pluto paperino minni\n2 - pluto minni" | grep -E 'pluto.*minni' 1 - pippo pluto paperino minni 2 - pluto minni
Il “.*” è un’espressione regolare, il punto corrisponde a un singolo carattere ma seguito a da un asterisco significa qualsiasi cosa, anche niente.
alex@vegeta:~$ echo -e "1 - pippo pluto paperino topo\n2 - pluto minni\n3 - topolino" | grep -E 'topo.*lino' 3 - topolino
Se voglio evidenziare solo la parte di linea i cui caratteri corrispondono al pattern ricercato uso l’opzione o del comando grep:
alex@vegeta:~$ echo -e "1 - pippo pluto paperino minni\n2 - pluto minni" | grep -Eo 'pluto.*minni' 1 - pluto paperino minni 2 - pluto minni
Se invece vogliamo una ricerca in cui l’operatore è l’OR invece dell’AND si usa la seguente sintassi nel grep:
alex@goku:~$ echo -e "1 - pippo pluto paperino\n2 - pluto minni" | grep -E 'minni|pippo' 1 - pippo pluto paperino 2 - pluto minni
Infine volevo indicare un metodo alternativo al grep usando il comando awk per ottenere lo stesso risultato di ricerca:
alex@goku:~$ echo -e "1 - pippo pluto paperino\n2 - pluto minni" | awk '/pluto/ && /minni/' 2 - pluto minni alex@goku:~$ echo -e "pippo pluto paperino\npluto minni" | awk '/minni/ || /pippo/' 1 - pippo pluto paperino 2 - pluto minni
[ad name=”HTML”]