grep -l string2 'grep -l string1 /path/*'
que é o mesmo que
grep -l string2 $(grep -l string1 /path/*)
Edit: heres porque grep string1 /path/* | grep string2
não faz o que eu acho que alwbtc quer.
$ cd /tmp
$ cat a
apples
oranges
bananas
$ cat b
apples
mangoes
lemons
$ cat c
mangoes
limes
pears
$ cd ~
$ grep apples /tmp/* | grep mangoes
$
Nada foi encontrado, mas o arquivo b contém as duas strings.
Aqui está o que eu acho que o alwbtc quer
$ grep -l apples $(grep -l mangoes /tmp/*)
/tmp/b