
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 grep
puedes 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 pattern
o sin patrón. Así todo coincidirá.
Le he grep
asignado 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é -I
ignorar los archivos binarios, pueden less
complicar 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.