Como retornar o nome do arquivo e o número da linha com find ... -exec grep?


45

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

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

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

Respostas:


51

A opção da linha de comando -Hforça grepa impressão do 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, como Kojiro diz em um comentário , isso não faz parte do padrão POSIX; está no GNU e no BSD grep, mas é possível que alguns sistemas não o possuam (por exemplo, Solaris).


4
Esta resposta pode ser melhorada, apontando que o -Hsinalizador para grepé uma extensão GNU fora do padrão e propondo uma abordagem alternativa para sistemas não-GNU.
Kojiro #


-1

Se o seu grep suporta o -rsinalizador recursivo , isso resolve sua solicitação:

grep -rn "String to search " * 

1
Isso é verdade, mas não vejo o que isso acrescenta às respostas existentes.
Curinga

E se houver apenas um arquivo (sem ponto) no diretório atual, isso não exibirá o nome do arquivo.
G-Man diz 'Reinstate Monica'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.