GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo 'grep' una secuencia continua?

Creo que su problema es que grep usa algo de almacenamiento en búfer de salida. Prueba

tail -f file | stdbuf -o0 grep my_pattern

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


Enciende grep Modo de almacenamiento en búfer de línea cuando se usa BSD grep (FreeBSD, Mac OS X, etc.)

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

Parece que fue hace un tiempo --line-buffered no importó para GNU grep (usado en casi cualquier Linux) ya que se vació de forma predeterminada (YMMV para otros tipos de Unix como SmartOS, AIX o QNX). Sin embargo, a partir de noviembre de 2020, --line-buffered es necesario (al menos con GNU grep 3.5 en openSUSE, pero generalmente parece necesario según los comentarios a continuación).


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).


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

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

El -c +0 bandera dice que la salida debe comenzar 0 bytes (-c ) desde el principio (+ ) del archivo.


Linux
  1. ¿Cómo puedo buscar un patrón de varias líneas en un archivo?

  2. ¿Cómo hago grep recursivamente?

  3. ¿Cómo buscar contenido después del patrón?

  4. Cómo suprimir los resultados de coincidencia de archivos binarios en grep

  5. Cómo hacer grep para Unicode en un script bash

Cómo crear un archivo en Linux

Cómo crear un archivo Tar Gz

Cómo descomprimir (abrir) un archivo Gz

Cómo encontrar una cadena en un archivo en Linux

Cómo vincular un archivo en Linux

Cómo migrar CentOS 8 a CentOS Stream