grep i tail -f?


28

Czy jest możliwe zrobienie tail -f(lub podobnego) pliku i grepjednocześnie? Nie miałbym nic przeciwko innym poleceniom, które tylko szukają tego rodzaju zachowania.

Odpowiedzi:


46

Używając GNU taili GNU grep, jestem w stanie grepować tail -fprzy użyciu prostej składni:

tail -f /var/log/file.log | grep search_term

To rozwiązanie działa z innymi implementacjami tych dwóch narzędzi, nie tylko z implementacją GNU.
Kusalananda

7

Będzie działać dobrze; bardziej ogólnie, greppoczeka, gdy program nie wyświetla danych wyjściowych, i będzie czytał dalej, gdy pojawi się wynik, więc jeśli to zrobisz:

$ (echo foo; sleep 5; echo test; sleep 5) | grep test

Nic się nie wydarzy przez 5 sekund, następnie grep wyświetli dopasowany „test”, a następnie pięć sekund później zakończy działanie, gdy zakończy się proces potokowy


7

Dodaj --line-buffereddo grep, a to może zmniejszyć opóźnienie. Bardzo przydatne w niektórych przypadkach.

tail -f foo | grep --line-buffered bar

2
Jest to przydatne, gdy dane wyjściowe grepnie trafiają do terminala (przekierowywany do innego typu pliku). buforowanie linii jest domyślne, gdy dane wyjściowe trafiają do terminala, więc nie robi to żadnej różnicy. Zauważ, że ta opcja jest specyficzna dla GNU.
Stéphane Chazelas


2

Widzę tych wszystkich ludzi, którzy mówią, aby korzystać tail -f, ale nie podoba mi się to! Moją ulubioną metodą wyszukiwania pliku przy jednoczesnym obserwowaniu nowych wierszy (np. Zwykle pracuję z plikami dziennika, do których są dołączane przekierowane dane wyjściowe procesów wykonywanych okresowo za pomocą zadań cron):

 tail -Fn+0 /path/to/file|grep searchterm

Zakłada to ogon i grep GNU. Dodatkowe informacje ze strony ogona (GNU coreutils, mój to v8.22) [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :

 -F     same as --follow=name --retry
 -n, --lines=K
         output the last K lines, instead of the last 10; or use -n +K to output
         starting with the Kth.
         If  the first character of K (the number of bytes or lines)
         is a '+', print beginning with the Kth item from the start
         of each file, otherwise, print the last K items in the file.
         K may have a multiplier suffix: b 512, kB 1000, K 1024, MB
         1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024,
         and so on for T, P, E, Z, Y.

  With --follow (-f), tail defaults to following the file descriptor,
  which means that even if a tail'ed file is renamed, tail will
  continue to track its end.  This default behavior is  not  desirable
  when  you  really  want  to  track the actual name of the file, not
  the file descriptor (e.g., log rotation).  Use --follow=name in
  that case.  That causes tail to track the named file in a way that
  accommodates renaming, removal and creation.

Tak więc część tail --follow --retry --lines=+0końcowa mojego polecenia jest równa temu , w którym ostatni argument kieruje go do rozpoczęcia od początku, pomijając linie zerowe.


1
tail -f access | awk '/ADD/{print $0}'

Użyj powyższego, zwykle go używam.


0

Możesz użyć netcata do grepowania wyników tail -f, ponieważ nowe wyniki pojawiają się dość łatwo.

sudo nc -s localhost -l -p 1337 | grep ssh


tail -f /var/log/file.log | nc 127.0.0.1 1337

To ustawia grep na nasłuchiwanie wyników dla danych wejściowych pochodzących z portu 1337.
Drugie polecenie przekazuje dane wyjściowe tail -f do netcat i wysyła je do lokalnego hosta 1337. Aby to zrobić lokalnie, należy przełączyć ttys dla każdego z dwóch zestawów poleceń lub użyj czegoś takiego jak ekran.


0

To działa. Uważaj jednak, aby dane wyjściowe nie były natychmiastowe: są buforowane przez potok.


Zgoda. Aby to przetestować, otwórz dwa okna. Uruchom tail -fw jednym oknie, a tail -f logfile | grep patternw drugim oknie. Linie zawierające patternnie zawsze pojawiają się w obu oknach jednocześnie. Widziałem linie pojawiają się w odstępach 30 sekund w rzadkich przypadkach, co było denerwujące.
Stefan Lasiewski

Może to mieć więcej wspólnego z systemem przewracania między uruchomieniem jednego lub drugiego wystąpienia ogona. Lepszy test mógłby nas teeczy coś.
Kevin Cantu,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.