¿Cómo buscar una palabra en un archivo pero también mostrar el archivo completo junto con la palabra encontrada?

¿Cómo buscar una palabra en un archivo pero también mostrar el archivo completo junto con la palabra encontrada?

Estoy usando Ubuntu 16.04.

Quiero buscar una palabra determinada, pero también quiero que todo el archivo que contiene la palabra se genere en el terminal para poder ver en qué parte del archivo se encuentra la palabra. Sin embargo, cuando uso grep, solo mostrará la oración particular que contiene la palabra, no el archivo completo.

¿Qué comando puedo usar para buscar una palabra pero también mostrar el archivo completo junto con el lugar donde se encuentra la palabra?

Respuesta1

Con greppuedes usar:

$ grep -E -e 'pattern' -e '$' file

o en forma simplificada:

$ grep -E 'pattern|$' file

Técnicamente esto también funcionaría:

$ grep -E 'pattern|^' file

o incluso : grep -E 'pattern|' file. Dice líneas con patterno sin patrón. Así todo coincidirá.

Le he grepasignado un alias grep --color=always, por lo que si no es así, deberá pasar la opción de color usted mismo.


Con less:

$ less -p 'pattern' file

Entonces, el archivo aparecerá en menos, el término deseado se resaltará y podrá usar ny shift+ npara saltar entre coincidencias.

Respuesta2

Editar: malinterpreté la pregunta en mi respuesta original... La edité para producir el resultado deseado... Solo mostraba el nombre del archivo en el resultado. Edité esta respuesta para usar esa salida para mostrar el archivo completo usando menos (como sugiere la respuesta de Ravexina)
... además, esto solo devolverá los archivos (en less) que han sido coincidentes con grep al buscar en un directorio ).
....y agregué -Iignorar los archivos binarios, pueden lesscomplicar la interacción. Elimínelo si necesita buscar archivos binarios o archivos que grep pueda "pensar" que son binarios.

Utilice el indicador "with-filename" con grep para mostrar el archivo. (la bandera es -H)

Supongo que está revisando un directorio y cada uno de los archivos que contiene. Si busca fuera del directorio actual, utilice *para evitar el error "es un directorio" sin resultados.

grep -HI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

o

grep --with-filename -I pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

o si profundiza en subdirectorios...

grep -rHI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

No me gusta ingresar el patrón dos veces, podría mejorar

Respuesta3

Si desea ver en qué parte del archivo se encuentra el texto buscado, utilice la bandera C. Por ejemplo:

grep -C 5 'MySearchText' *

mostrará la línea que contiene el texto y cinco líneas antes y cinco líneas después de la búsqueda deseada.

Respuesta4

Para complementar las otras respuestas: puede agregar '-n' a las opciones para ver los números de línea a la izquierda:

grep -n -C 3  "something"  filename

le mostrará líneas que contienen "algo", con 3 líneas de "Contexto" (es decir, 3 líneas antes y después de las que coinciden con "algo"), y cada línea mostrada tendrá su número de línea agregado al principio.

información relacionada