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
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.
-H
paragrep
é uma extensão GNU não padrão e apresenta uma abordagem alternativa para sistemas não GNU.