Kent, ¿ grep --versiones ese el comando que se utilizará para conocer la versión grep? Si es así, no está funcionando. No se pudo encontrar ningún otro comando para conocer la versión grep.
Vivek
2
buena pregunta, pero 'Os version' es un nombre de archivo de ejemplo confuso
HaveAGuess
1
El sistema operativo y la versión son irrelevantes aquí.
MD XF
grep 'pattern' *
usuario0
Respuestas:
430
Pruebe este pequeño truco para convencerlo de grepque se trata de varios archivos, de modo que muestre el nombre del archivo:
Sí, funcionó. ¿Me puede decir cuál es el significado de agregar /dev/nulleste comando?
Vivek
55
Si grepse suministra con varios nombres de archivo, mostrará automáticamente los nombres de archivo antes de la coincidencia, pero dejará el nombre de archivo en caso de un solo archivo de entrada. Al utilizar /dev/nullcomo un archivo de entrada adicional grep"piensa" que tratar con múltiples archivos, pero / dev / null es, por supuesto, vaciar, por lo que no se mostrará en la lista de coincidencias ..
Scrutinizer
32
usar / dev / null es un truco inteligente, pero creo que la sugerencia a continuación de la bandera -H es una mejor respuesta.
JohnQ
22
OK, pero la -Hopción para grep no es parte de POSIX, y el sistema operativo utilizado es Solaris 10, donde ni el grep estándar ni la versión de grep compatible con POSIX tienen la -Hopción.
Escrutinio
44
Eso es importante si está utilizando grep con find, como find . -name foo -exec grep pattern {} \;: suponiendo que haya muchos archivos nombrados fooen su subdirectorio, findaún entrega grepun solo archivo para operar a la vez. El /dev/nulltruco parece funcionar en todos los sabores de linux / osx que he probado, ¡así que felicitaciones! Tenga en cuenta que creo que -Hes más limpio, pero como se menciona a continuación, puede que no sea compatible con su versión de grep.
Jon V
296
Si tiene las opciones -Hy está -ndisponible ( man grepes su amigo):
@codeforester No conozco ningún otro greps, así que no sé.
MD XF
2
Frio ! Esto funcionó para Linux. si usa mac, puede instalar coreutils con brew. Y recuerde agregar PATH = "/ usr / local / opt / coreutils / libexec / gnubin: $ PATH" al suyo .bashrc
Funciona para mí con el Mac grep incorporado (2.5.1-FreeBSD). Pero para usar el grep alternativo de Homebrew, otra forma es ejecutar brew install grepy luego simplemente usar ggrep. No es necesario modificar la RUTA.
wonderlr
5
¿Qué tal esto, que logré lograr gracias, en parte, a esta publicación?
Desea encontrar varios archivos, digamos registros con diferentes nombres pero con un patrón (por ejemplo filename=logfile.DATE), dentro de varios directorios con un patrón (por ejemplo /logsapp1, /logsapp2). Cada archivo tiene un patrón que desea grep (por ejemplo "init time"), y desea tener el "init time"de cada archivo, pero sabiendo a qué archivo pertenece.
O simplemente usando findfind ./path_pattern/to_files -type f -name "files*.log" -exec grep -Hn pattern {} \;
Martin
1
Esta es una ligera modificación de una solución anterior. Mi ejemplo busca la redirección de stderr en los scripts de bash:
grep '2>' $(find . -name "*.bash")
grep --version
grep --version
es ese el comando que se utilizará para conocer la versión grep? Si es así, no está funcionando. No se pudo encontrar ningún otro comando para conocer la versión grep.grep 'pattern' *
Respuestas:
Pruebe este pequeño truco para convencerlo de
grep
que se trata de varios archivos, de modo que muestre el nombre del archivo:Para obtener también el número de línea:
fuente
/dev/null
este comando?grep
se suministra con varios nombres de archivo, mostrará automáticamente los nombres de archivo antes de la coincidencia, pero dejará el nombre de archivo en caso de un solo archivo de entrada. Al utilizar/dev/null
como un archivo de entrada adicionalgrep
"piensa" que tratar con múltiples archivos, pero / dev / null es, por supuesto, vaciar, por lo que no se mostrará en la lista de coincidencias ..-H
opción para grep no es parte de POSIX, y el sistema operativo utilizado es Solaris 10, donde ni el grep estándar ni la versión de grep compatible con POSIX tienen la-H
opción.find . -name foo -exec grep pattern {} \;
: suponiendo que haya muchos archivos nombradosfoo
en su subdirectorio,find
aún entregagrep
un solo archivo para operar a la vez. El/dev/null
truco parece funcionar en todos los sabores de linux / osx que he probado, ¡así que felicitaciones! Tenga en cuenta que creo que-H
es más limpio, pero como se menciona a continuación, puede que no sea compatible con su versión degrep
.Si tiene las opciones
-H
y está-n
disponible (man grep
es su amigo):Opciones:
-H
es una extensión de GNU, pero-n
está especificada por POSIXfuente
-H
no es compatible aquí.No es necesario un truco.
Con números de línea:
fuente
grep
s, así que no sé.brew install grep
y luego simplemente usarggrep
. No es necesario modificar la RUTA.¿Qué tal esto, que logré lograr gracias, en parte, a esta publicación?
Desea encontrar varios archivos, digamos registros con diferentes nombres pero con un patrón (por ejemplo
filename=logfile.DATE
), dentro de varios directorios con un patrón (por ejemplo/logsapp1, /logsapp2
). Cada archivo tiene un patrón que desea grep (por ejemplo"init time"
), y desea tener el"init time"
de cada archivo, pero sabiendo a qué archivo pertenece.Entonces el
outputfilename.txt
sería algo comoEn general
Explicación:
find
el comando buscará los nombres de archivo basados en el patrónentonces, la tubería
xargs -I{}
redirigirá lafind
salida a la{}
cual será la entrada para
grep ""pattern" {}
Luego el truco para hacer
grep
mostrar los nombres de archivo\dev\null
y finalmente, escriba la salida en el archivo con
tee outputfile.txt
Esto funcionó para mí en la
grep
versión 9.0.5, compilación 1989.fuente
find ./path_pattern/to_files -type f -name "files*.log" -exec grep -Hn pattern {} \;
Esta es una ligera modificación de una solución anterior. Mi ejemplo busca la redirección de stderr en los scripts de bash:
grep '2>' $(find . -name "*.bash")
fuente
funcionó para mí buscar en todos los archivos .txt (ingrese su propio valor de búsqueda, por supuesto).
fuente