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

  • Esta respuesta podría mejorarse señalando que el -H marca a grep es una extensión GNU no estándar y presenta un enfoque alternativo para sistemas que no son GNU.

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *