Preciso pesquisar alguns arquivos para ver quais contêm uma determinada palavra:
grep -l word *
Em seguida, preciso fazer o grep dessa lista de arquivos para ver quais contêm uma palavra diferente. A maneira mais fácil provavelmente seria escrever um script, mas eu não sei bem como trabalhá-lo.
Comentários
Resposta
Presumindo que nenhum dos nomes de arquivo contenha espaço em branco, aspas simples, aspas duplas ou barra invertida (ou comece com – com GNU grep
), você pode fazer:
grep -l word * | xargs grep word2
Xargs executará o segundo grep sobre cada arquivo do primeiro grep.
Com GNU grep
/ xargs
ou compatível, você pode torná-lo mais confiável com:
grep -lZ word ./* | xargs -r0 grep word2
Usar -Z
torna grep
imprime os nomes dos arquivos delimitados por NUL para que possam ser usados com xargs -0
. A opção -r
para xargs
evita que o segundo grep
seja executado se o primeiro grep
não encontrar nada.
Resposta
grep -l word1 $(grep -l word2 *)
ou talvez para uma das duas palavras na mesma linha:
grep -w "word1\|word2" *
veja aqui
Resposta
Se você precisar encontrar arquivos que contenham uma palavra e, em seguida, filtrar os arquivos que contêm outra palavra, você pode usar uma sequência de comandos como esta:
grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2
-
grep word *
– mostrará todos os arquivos contendo “palavra”, o nome do arquivo será o primeiro na lista. -
awk -F ":" "{print $1}"
– imprimirá apenas o nome do arquivo de seus resultados -
uniq
– garantirá que você não imprima o nome do arquivo por mais de uma vez. -
xargs grep word2
– pesquisará novamente na lista de arquivos que você obteve.
Comentários
- @don_crissti Mas combinar peças
grep -l word1 * | xargs -d'\n' grep -l word2
funciona para qualquer coisa, exceto nova linha, o que é estranho o suficiente quase ninguém a usa.
grep
? GNUgrep
? Você usa Linux, Solaris, BSDs?