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:
Bravo e grazie,
hai fatto bene a fare un post, mi ero 'segnato' l'argomento, ma come al solito ..
;)
Posta un commento