giovedì 26 novembre 2009

Trovare i file che contengono due parole.

Metodi scaturiti da un thread su Erlug.

BASH
grep -l stringa1 * | xargs grep -l stringa2

o meglio
grep -lZ stringa1 * | xargs -0 grep -l stringa2 )

oppure
comm -1 -2 <(grep -wl stringa1 * | sort) < (grep -wl stringa2 * | sort)

Note:
Il parametro -l del comando grep nasconde il normale output e visualizza solo il nome dei che contengono il pattern ricercato.

Il parametro -Z del comando grep inserisce un carattere NULL come carattere conclusivo di ogni nome file da visualizzare: viene usato in caso l'output di grep debba essere passato a qualche altro comando (nell'esempio xargs)

Il comando comm confronta due file ordinati linea per linea.

Il parametro -1 del comando comm esclude dall'output le linee uniche del primo file

Il parametro -2 del comando comm esclude dall'output le linee uniche del secondo file

PERL
perl -n0e 'if(/stringa1/&&/stringa2/){print "$ARGV\n"}' *

AWK

awk 'FNR==1{stringa1=0;stringa2=0}
/stringa1/{stringa1=1}
/stringa2/{stringa2=1}
stringa1 && stringa2 {print FILENAME; nextfile}' *

1 commento:

davide ha detto...

Bravo e grazie,
hai fatto bene a fare un post, mi ero 'segnato' l'argomento, ma come al solito ..
;)