Ao usar find, como faço para retornar o nome do arquivo e o número da linha ao pesquisar uma string? Consigo retornar o nome do arquivo em um comando e os números das linhas com outro, mas não consigo combiná-los.

Nomes dos arquivos: find . -type f -exec grep -l "string to search" {} \;

Números de linha: find . -type f -exec grep -n "string to search" {} \;

Resposta

O a opção de linha de comando -H força grep a imprimir o nome do arquivo, mesmo com apenas um arquivo.

% grep -n 7 test.in 7:7 % grep -Hn 7 test.in test.in:7:7 

 -H, --with-filename Print the filename for each match. 

Observe que, conforme Kojiro diz em um comentário , isso não faz parte do padrão POSIX; está em GNU e BSD grep, mas é possível que alguns sistemas não o tenham (por exemplo, Solaris).

Comentários

  • Esta resposta pode ser melhorada apontando que o sinalizador -H para grep é uma extensão GNU não padrão e apresenta uma abordagem alternativa para sistemas não GNU.

Resposta

find . -type f -exec grep -n "string to search" /dev/null {} + 

(ou com GNU grep, consulte -H opção)

Comentários

  • + e -H funcionam muito bem, obrigado!
  • E relacionado a esta resposta: unix.stackexchange.com/questions/3682/…
  • +1 Certo, porque fazer com que grep tenha vários argumentos de nome de arquivo forçaria a saída dos nomes de arquivo correspondentes. Inteligente!

Resposta

Se o seu grep suportar o -r sinalizar, isso resolve sua solicitação:

grep -rn "String to search " * 

Comentários

  • Isso ' é verdade, mas eu não ' não vejo o que isso adiciona às respostas existentes.
  • E se houver apenas uma (sem ponto ) arquivo no diretório atual, isso não exibe o nome do arquivo.

Deixe uma resposta

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