GNU/Linux >> Znalost Linux >  >> Linux

Jak 'grep' nepřetržitý proud?

Myslím, že váš problém je v tom, že grep používá nějaké výstupní vyrovnávací paměti. Zkuste

tail -f file | stdbuf -o0 grep my_pattern

nastaví výstupní režim vyrovnávací paměti grep na unbuffered.


Zapněte grep režim vyrovnávací paměti řádku při použití BSD grep (FreeBSD, Mac OS X atd.)

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

Vypadá to jako před chvílí --line-buffered nezáleželo na GNU grep (používá se v podstatě na jakémkoli Linuxu), protože se ve výchozím nastavení vyprázdnil (YMMV pro jiné unixové systémy jako SmartOS, AIX nebo QNX). Od listopadu 2020 však --line-buffered je potřeba (alespoň s GNU grep 3.5 v openSUSE, ale na základě komentářů níže se zdá být obecně potřeba).


Používám tail -f <file> | grep <pattern> pořád.

Počká, až se grep vypláchne, ne až skončí (používám Ubuntu).


Pokud chcete najít shodu v celém soubor (nejen ocas) a chcete, aby seděl a čekal na nové shody, funguje to pěkně:

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

-c +0 příznak říká, že výstup by měl začínat 0 bajtů (-c ) od začátku (+ ) souboru.


Linux
  1. Grep Jak potlačit zobrazení neshodného souboru?

  2. Jak přejmenovat soubor v Linuxu?

  3. Jak mohu vyhledat víceřádkový vzor v souboru?

  1. Jak mohu grep rekurzivně?

  2. Jak hledat obsah po vzoru?

  3. Jak grep \nv souboru

  1. Jak obnovit odstraněný soubor pod Linuxem?

  2. Jak grep pro unicode � ve skriptu bash

  3. Jak získat řádky, které obsahují řetězec v souboru?