Assim como -L procura conteúdo de um arquivo sem correspondência, -l pesquisa o conteúdo de um arquivo com uma correspondência.
Portanto, você precisará especificar o -l flag no segundo "grepping".
Além disso, você precisará direcionar a saída do primeiro grep para o segundo como argumentos da linha de comando. Isso pode ser feito usando xargs , que é uma ferramenta para ler itens da entrada padrão. Piping os nomes dos arquivos diretamente faria o segundo grep procurar pela string authenticate no arquivo nomes .
então você deve acabar com algo como
grep -r --color -L "class public interface" * | xargs grep -l "authenticate"'
Observe que xargs , por padrão, divide a entrada em qualquer espaço em branco. Portanto, se você tiver nomes de arquivos com espaços (ou piores), será necessário usar grep -Z e xargs -0 para separar os nomes de arquivo por NUL bytes em vez disso. (No GNU grep, isto é, outros podem ser diferentes, por exemplo, o FreeBSD grep tem --null ).