Solución 1:
Con Unix puede canalizar la salida de un programa a otro.
Entonces, para filtrar la cola, puedes usar grep:
tail -f path | grep your-search-filter
Solución 2:
Respuesta corta:tail -f somefile | grep somepattern
Sin embargo, esto tiende a quedarse corto. Digamos que está siguiendo un archivo que se rota con frecuencia (si es un registro de depuración, podría rotarse varias veces). En ese caso tail -F
es tu amigo. Te dejaré buscar la diferencia.
Pero tail -f
y tail -F
imprima un montón de líneas primero, lo que a menudo no es deseable en este caso de uso, por lo que en este caso agregue -n0
tail -F -n0 somefile | grep somepattern
Eso estará bien, hasta que desee hacer algún otro filtrado, y luego debe tener cuidado con el almacenamiento en búfer. stdout tiene un búfer de línea por defecto cuando se escribe en una terminal pero cuando está completamente almacenado en búfer al escribir en una tubería. Entonces, lo siguiente emitirá líneas tan pronto como se encuentren, porque tail
tiene un búfer de línea explícito (o vacía su salida al final de cada línea), y grep
también tiene un búfer de línea porque su salida va a su terminal:
tail -F -n0 somefile | grep somepattern
Pero luego decides usar algo como awk
o cut
para seguir procesando la salida.
tail -F -n0 somefile | grep somepattern | awk '{print $3}'
Y ahora se pregunta adónde ha ido su salida... dependiendo del volumen de registros, es posible que obtenga una salida, pero será una página a la vez porque ahora la salida estándar de grep
está operando en modo de búfer completo, por lo que awk
lo recibe de entrada 4kB a la vez (por defecto).
En este caso, puedes decirle a grep
para hacer que la línea de salida estándar siempre se almacene en búfer usando el --line-buffered
opción.
tail -F -n0 somefile | grep --line-buffered somepattern | ...
Sin embargo, la mayoría de los comandos no tienen un análogo de --line-buffered
. En el caso de herramientas más programables, puede usar una función para vaciar la salida (por ejemplo, en awk
, la función es fflush()
, que comparte el mismo nombre que su contraparte C, herramientas como Perl y Python tienen algo similar).
Con los gustos de cut
es probable que no tengas suerte; ... pero podría intentar buscar unbuffer
, que creo que es algo proporcionado por el expect
cadena de herramientas (nunca la he usado).
Espero que hayas encontrado esto útil.
Saludos, Cameron
Solución 3:
y puede usar varias canalizaciones y greps, y excluir cosas con grep -v, obtener insensibilidad a mayúsculas y minúsculas con grep -i, etc.
es decir:cola -100f /var/log/messages | grep -V ACPI | grep -i ata
comience siguiendo 100 líneas desde el final y siga siguiendo, primero excluya cualquier línea con ACPI, luego muestre las líneas con ata, ATA o cualquier combinación de ellas.
Otra opción útil son las opciones ABC, para las líneas Después, Antes y Contexto (líneas antes y después).