Pregunta ¿Cómo 'grep' un flujo continuo?


Es eso posible de usar grep en un flujo continuo?

Lo que quiero decir es una especie de tail -f <file> comando, pero con grep en la salida para mantener solo las líneas que me interesan.

He intentado tail -f <file> | grep pattern pero parece que grep solo se puede ejecutar una vez tail termina, es decir, nunca.


573
2017-08-23 13:34


origen


Respuestas:


Encender grepmodo de almacenamiento en línea de la línea cuando se usa grep BSD (FreeBSD, Mac OS X, etc.)

tail -f file | grep --line-buffered my_pattern

No es necesario hacer esto para GNU grep (usado en casi cualquier Linux) ya que se vaciará por defecto (YMMV para otros gustos de Unix como SmartOS, AIX o QNX).


1060
2017-08-23 14:44



Yo uso el tail -f <file> | grep <pattern> todo el tiempo.

Esperará hasta que grep se vacíe, no hasta que termine (estoy usando Ubuntu).


104
2017-08-23 13:37



Creo que tu problema es que grep usa algunos buffer de salida. Tratar

tail -f file | stdbuf -o0 grep my_pattern

establecerá el modo de almacenamiento en búfer de salida de grep en no búfer.


50
2017-08-23 13:58



En la mayoría de los casos, puedes tail -f /var/log/some.log |grep foo y funcionará bien.

Si necesita utilizar múltiples greps en un archivo de registro en ejecución y descubre que no obtiene ningún resultado, es posible que deba incluir el --line-buffered cambia a tu medio grep (s), así:

tail -f /var/log/some.log | grep --line-buffered foo | grep bar

5
2018-05-04 17:14



Si quieres encontrar coincidencias en el todo archivo (no solo la cola), y desea que se siente y espere nuevas coincidencias, esto funciona muy bien:

tail -c +0 -f <file> | grep --line-buffered <pattern>

los -c +0 la bandera dice que la salida debería comenzar 0 bytes (-c) desde el principio (+) del archivo.


4
2017-09-11 22:34



puedes considerar esta respuesta como una mejora ... generalmente estoy usando

tail -F <fileName> | grep --line-buffered  <pattern> -A 3 -B 5

-F es mejor en caso de rotación de archivos (-f no funcionará correctamente si el archivo gira)

-A y -B es útil para obtener líneas justo antes y después de la ocurrencia del patrón ... estos bloques aparecerán entre los separadores de líneas punteadas


1
2017-07-27 23:39



Sí, esto realmente funcionará bien. Grep y la mayoría de los comandos de Unix operan en las transmisiones una línea a la vez. Cada línea que sale de la cola será analizada y transmitida si coincide.


0
2017-08-23 13:41



No vi a nadie ofrecer mi habitual para esto:

less +F <file>
ctrl + c
/<search term>
<enter>
shift + f

Prefiero esto, porque puedes usar ctrl + c detenerse y navegar a través del archivo cada vez, y luego solo golpear shift + f para volver a la búsqueda en tiempo real.


0
2018-04-10 02:20