¿Cómo devolver el nombre de archivo y el número de línea con find ... -exec grep?


45

Cuando lo uso find, ¿cómo devuelvo el nombre del archivo y el número de línea cuando busco una cadena? Me las arreglo para devolver el nombre del archivo en un comando y los números de línea con otro, pero parece que no puedo combinarlos.

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

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

Respuestas:


51

El interruptor de línea de comando -Hobliga grepa imprimir el nombre del archivo, incluso con un solo archivo.

% 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.

Tenga en cuenta que, como dice Kojiro en un comentario , esto no es parte del estándar POSIX; está en GNU y BSD grep, pero es posible que algunos sistemas no lo tengan (por ejemplo, Solaris).


44
Esta respuesta podría mejorarse señalando que el -Hindicador a grepes una extensión GNU no estándar y planteando un enfoque alternativo para sistemas no GNU.
kojiro


-1

Si su grep admite la -rbandera recursiva , esto resuelve su solicitud:

grep -rn "String to search " * 

1
Eso es cierto, pero no veo lo que esto agrega a las respuestas existentes.
Comodín el

Y si solo hay un archivo (sin punto) en el directorio actual, este no muestra el nombre del archivo.
G-Man dice 'Reincorporar a Monica' el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.