tail -f path
Lo anterior generará modificaciones al archivo al instante, pero quiero aplicar un filtro a la salida, solo se mostrará cuando haya una palabra clave xxxen él.
¿Cómo abordar esto?
tail -f path
Lo anterior generará modificaciones al archivo al instante, pero quiero aplicar un filtro a la salida, solo se mostrará cuando haya una palabra clave xxxen él.
¿Cómo abordar esto?
Respuestas:
Con Unix puede canalizar la salida de un programa a otro.
Entonces, para filtrar la cola, puede usar grep:
tail -f path | grep your-search-filter
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 se trata de un registro de depuración, podría rotarse varias veces). En ese caso tail -Fes tu amigo. Te dejaré buscar la diferencia.
Pero tail -fe tail -Fimprima primero un montón de líneas, lo que a menudo no es deseable en este caso de uso, así que en este caso agregue-n0
tail -F -n0 somefile | grep somepattern
Eso estará bien, hasta que quieras hacer algún otro filtrado, y luego debes tener cuidado con el almacenamiento en búfer. stdout tiene un buffer de línea por defecto cuando se escribe en una terminal, pero cuando está completamente protegido cuando se escribe en una tubería Entonces, lo siguiente emitirá líneas tan pronto como se encuentren, porque tailestá explícitamente almacenado en la línea (o vacía su salida al final de cada línea), y greptambién está almacenado en la línea porque su salida va a su terminal:
tail -F -n0 somefile | grep somepattern
Pero luego decides usar algo como awko cutprocesar aún más la salida.
tail -F -n0 somefile | grep somepattern | awk '{print $3}'
Y ahora te preguntas a dónde se ha ido tu salida ... dependiendo del volumen de registros, puedes encontrar que obtienes salida, pero será una página a la vez porque ahora el stdout de grepestá operando de manera totalmente protegida, y así awkrecibe su entrada 4kB a la vez (por defecto).
En este caso, puede decir grepque siempre haga que la línea estándar se almacene utilizando la --line-bufferedopció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 awk, en , la función es fflush(), que comparte el mismo nombre que su contraparte en C, herramientas como Perl y Python tienen algo similar).
Con los gustos de cutusted probablemente no tenga suerte; ... pero puede intentar buscar unbuffer, que creo que es algo que proporciona la expectcadena de herramientas (nunca lo he usado).
Espero que hayas encontrado esto útil.
Saludos, Cameron
y puede usar múltiples tuberías 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 a seguir 100 líneas desde el final y continúe, primero excluya cualquier línea con ACPI, luego muestre líneas con ata, ATA o cualquier combinación de ellas.
Otra práctica es las opciones ABC, para las líneas Después, Antes y Contexto (líneas antes y después).