linux tail - ¿Cómo 'grep' un flujo continuo?




log file (10)

¿Es posible usar grep en un flujo continuo?

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

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


Answers

sed sería el comando apropiado (editor de flujo )

tail -n0 -f <file> | sed -n '/search string/p'

y luego, si desea que el comando tail se cierre una vez que encuentre una cadena en particular:

tail --pid=$(($BASHPID+1)) -n0 -f <file> | sed -n '/search string/{p; q}'

Obviamente un bashismo: $ BASHPID será el id del proceso del comando tail. El comando sed es el siguiente después de la cola en la tubería, por lo que el ID del proceso sed será $ BASHPID + 1.


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

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


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

Si necesita usar varios archivos grises en un archivo de registro en ejecución y descubre que no obtiene ningún resultado, es posible que deba pegar el interruptor --line-buffered en su (s) grep medio (s), así:

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

Use awk (otra gran utilidad de bash) en lugar de grep donde no tenga la opción de línea de búfer. Continuará la transmisión de sus datos desde la cola.

así es como usas grep

tail -f <file> | grep pattern

Así es como usarías awk.

tail -f <file> | awk '/pattern/{print $0}'

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


No vi a nadie que ofrezca mi cita habitual para esto:

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

Prefiero esto, porque puedes usar ctrl + c para detenerte y navegar a través del archivo cada vez, y luego presionar shift + f para volver a la búsqueda en vivo.


Active el modo de búfer de línea de grep cuando utilice BSD grep (FreeBSD, Mac OS X, etc.)

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

No necesita hacer esto para GNU grep (utilizado en casi cualquier Linux) ya que se descargará de manera predeterminada (YMMV para otros Me gusta de Unix como SmartOS, AIX o QNX).


Este comando me funciona (Suse):

mail-srv:/var/log # tail -f /var/log/mail.info |grep --line-buffered LOGIN  >> logins_to_mail

Recopilar inicios de sesión al servicio de correo


Usted puede considerar esta respuesta como una mejora .. por lo general estoy usando

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

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

-A y -B son útiles para obtener líneas justo antes y después de la aparición del patrón ... estos bloques aparecerán entre separadores de líneas discontinuas


Sé que la pregunta está etiquetada como bash , pero parece que el problema que estás tratando de resolver también está relacionado con PHP.

Sebastian Bergmann escribió una herramienta llamada PHPLOC que hace lo que usted quiere y además le proporciona una visión general de la complejidad de un proyecto. Este es un ejemplo de su informe:

Size
  Lines of Code (LOC)                            29047
  Comment Lines of Code (CLOC)                   14022 (48.27%)
  Non-Comment Lines of Code (NCLOC)              15025 (51.73%)
  Logical Lines of Code (LLOC)                    3484 (11.99%)
    Classes                                       3314 (95.12%)
      Average Class Length                          29
      Average Method Length                          4
    Functions                                      153 (4.39%)
      Average Function Length                        1
    Not in classes or functions                     17 (0.49%)

Complexity
  Cyclomatic Complexity / LLOC                    0.51
  Cyclomatic Complexity / Number of Methods       3.37

Como puede ver, la información proporcionada es mucho más útil desde la perspectiva de un desarrollador, ya que puede decirle aproximadamente lo complejo que es un proyecto antes de comenzar a trabajar con él.







linux bash shell grep tail