Quiero tail -f
mis registros. Sin embargo, quiero filtrar todo lo que tenga las palabras:
"ELB", "Pingdom", "Salud"
Quiero tail -f
mis registros. Sin embargo, quiero filtrar todo lo que tenga las palabras:
"ELB", "Pingdom", "Salud"
Respuestas:
No sé sobre el uso de awk en lugar de grep, pero esto funciona para mí:
tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'
EDITAR: Como señalaron dmourati y Caleb , también podría usarlo en egrep
lugar de grep -E
por conveniencia. En algunos sistemas, esto será un enlace al mismo binario, en otros, una copia del paquete grep. De cualquier manera, vive como una alternativa al -E
cambio. Sin embargo, de acuerdo con la página de manual de GNU grep:
[…] Dos programas variantes
egrep
yfgrep
están disponibles.egrep
es el mismo quegrep -E
.fgrep
es el mismo quegrep -F
. La invocación directa comoegrep
ofgrep
está en desuso, pero se proporciona para permitir que las aplicaciones históricas que se basan en ellas se ejecuten sin modificaciones.
Dado que son comandos sinónimos, todo se reduce a preferencia a menos que no tenga egrep en absoluto. Sin embargo, para la compatibilidad con versiones anteriores, se recomienda utilizar la grep -E
sintaxis ya que el otro método está oficialmente en desuso.
grep -E
lugar de egrep
garantizar una respuesta duplicada?
sed
, awk
, perl
, multitail
o ninja_foo
.
Intente canalizarlo a egrep con una lista de palabras separadas por tuberías que desee filtrar:
tail -f log_file | egrep -v 'ELB|Pingdom|Health'
Tenga en cuenta que usar paréntesis alrededor de la lista de coincidencias es opcional. Como |
grep trata el operador OR lógico, ya sea que ocurra como parte de un subgrupo o no. '(ELB|Pingdom|Health)'
funcionaría exactamente igual. Para algunos, la sintaxis puede ser más obvia; Me resulta más fácil escribir sin él, ya que puedo cambiar de una sola coincidencia a una lista de posibles coincidencias sin volver a agregar el paréntesis.
Para obtener un crédito adicional, vale la pena mencionar que multitail
hace ninja foo cuando se trata de filtrar resultados. Por ejemplo, podría filtrar sus palabras de esta manera:
multitail -e ELB -e Pingdom -e Health -f log_file
También puede usarlo para colorear o resaltar el resultado en lugar de simplemente filtrarlo.
EDITAR: Vea la respuesta de DTests y los comentarios para obtener una explicación completa de cómo egrep es solo una forma alternativa desaprobada de disparar grep -E
.
¿Por qué quieres registrar esta información?
Si desea tener un comportamiento programado según el contenido de los archivos de registro, es posible que desee realizar el filtrado con Expect. ( http://en.wikipedia.org/wiki/Expect ) Expect es una extensión Tcl pero también hay una versión de Expect en Python.
Expect le brinda este poderoso interruptor flexible como declaración que le permite especificar diferentes comportamientos condicionalmente dependiendo de los estados o patrones presentes en su flujo de entrada. Por ejemplo:
expect {
"password:" {
send "password\r"
}
"yes/no)?" {
send "yes\r"
set timeout -1
}
timeout {
exit
}
-re . {
exp_continue
}
eof {
exit
}
}
Por lo tanto, especifica patrones en la declaración de espera, y especifica diferentes comportamientos, y puede envolver todo en un bucle, y puede escribir fácilmente filtros muy potentes que también escriben porciones de su entrada en diferentes archivos, o soltarlo por completo, o tome medidas y ejecute otros scripts según lo que haya en su entrada.
Entonces, todo se reduce a por qué está tratando de filtrar sus archivos de registro, tomar medidas en la entrada del registro o simplemente por razones de archivo.