Cuando utilizo 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" {} \;
Números de línea: find . -type f -exec grep -n "string to search" {} \;
Respuesta
El El cambio de línea de comando -H
fuerza a grep
a 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).
Comentarios
Respuesta
find . -type f -exec grep -n "string to search" /dev/null {} +
(o con GNU grep, consulte el -H
opción)
Comentarios
- tanto + como -H funcionan muy bien, ¡gracias!
- Y relacionado con esta respuesta: unix.stackexchange.com/questions/3682/…
- +1 Correcto, porque hacer que
grep
tenga varios argumentos de nombre de archivo lo obligaría a generar los nombres de archivo coincidentes. ¡Inteligente!
Responder
Si su grep admite el -r
bandera, esto resuelve su solicitud:
grep -rn "String to search " *
Comentarios
- Eso ' es cierto, pero no ' no veo lo que esto agrega a las respuestas existentes.
- Y si solo hay una (sin puntos ) en el directorio actual, esto no muestra el nombre del archivo.
-H
marca agrep
es una extensión GNU no estándar y presenta un enfoque alternativo para sistemas que no son GNU.