Esto es lo que escribí y se esperaba que obtuviera solo el registro del usuario en el ""
. Pero tengo todos los registros en el servidor:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
¿Qué debo cambiar en este ciclo para encontrar solo el registro con esta palabra clave?
Gracias.
Respuesta aceptada:
El zgrep
El comando es muy útil para grepping en archivos comprimidos y evita la necesidad de canalizar zcat
a grep
. Tampoco es necesario utilizar el ciclo for para crear una lista de archivos mediante globbing (coincidencia de patrones de shell).
zgrep U2779897722719715411 *.log.gz >> sara.log
Ese comando generará el nombre del archivo y la línea que contiene U2779897722719715411 separados por un :
personaje.
Si no desea el prefijo del nombre de archivo, puede usar -h
opción a zgrep
:
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Esto también se puede lograr con un bucle, pero evite usar ls
y lleve a cabo la redirección al archivo después de que se complete el bucle:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Alternativamente, si solo desea el nombre de archivo de los archivos que contienen esa cadena de usuario U2779897722719715411, puede usar -l
opción a zgrep
en cualquiera de los comandos anteriores:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
o
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log