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

  • Qual grep? GNU grep? Você usa Linux, Solaris, BSDs?
  • Eu ' m usando Linux.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *