GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire il "grep" di un flusso continuo?

Penso che il tuo problema sia che grep utilizza un buffer di output. Prova

tail -f file | stdbuf -o0 grep my_pattern

imposterà la modalità di buffering dell'output di grep su unbuffered.


Attiva grep la modalità di line buffering di quando si utilizza BSD grep (FreeBSD, Mac OS X ecc.)

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

Sembra un po' di tempo fa --line-buffered non importava per GNU grep (usato praticamente su qualsiasi Linux) poiché veniva scaricato per impostazione predefinita (YMMV per altri tipi di Unix come SmartOS, AIX o QNX). Tuttavia, a partire da novembre 2020, --line-buffered è necessario (almeno con GNU grep 3.5 in openSUSE, ma sembra generalmente necessario in base ai commenti di seguito).


Uso il tail -f <file> | grep <pattern> tutto il tempo.

Aspetterà finché grep non si scarica, non finché non finisce (sto usando Ubuntu).


Se vuoi trovare corrispondenze nell'intero file (non solo la coda), e vuoi che si sieda e attenda eventuali nuove corrispondenze, funziona bene:

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

Il -c +0 flag dice che l'output dovrebbe iniziare con 0 byte (-c ) dall'inizio (+ ) del file.


Linux
  1. Come rinominare un file in Linux?

  2. Come posso cercare uno schema multilinea in un file?

  3. Come faccio a grep in modo ricorsivo?

  4. Come eseguire il grep per i contenuti dopo il modello?

  5. Come sopprimere i risultati della corrispondenza dei file binari in grep

Come creare un file in Linux

Come creare file Tar Gz

Come decomprimere (aprire) il file Gz

Come trovare una stringa in un file su Linux

Come collegare simbolicamente un file in Linux

Come migrare da CentOS 8 a CentOS Stream