2012-12-13 10 views
16

Idąc z typowym dzienniku dostępu Apache, można uruchomić:Rurociągi wyjście ogon chociaż grep dwukrotnie

tail -f access_log | grep "127.0.0.1" 

Który będzie tylko pokazać dzienniki (ponieważ są one utworzone) dla określonego adresu IP.

Ale dlaczego to się nie udaje, gdy po raz drugi potrącasz go grep, aby jeszcze bardziej ograniczyć wyniki?

Na przykład, proste wykluczenie dla ".css":

tail -f access_log | grep "127.0.0.1" | grep -v ".css" 

nie pokaże żadnych wyników.

+0

Zobacz również [double grep na ogon -f nie daje Output] (http: //unix.stackexchange.com/a/164681/20661) – rubo77

Odpowiedz

10

Jest to wynikiem buforowania, to w końcu wydrukować kiedy wystarczająco dużo danych.

Użyj opcji --line-buffered jak sugeruje Shawn Chin czy stdbuf jest dostępna można uzyskać ten sam efekt z:

tail -f access_log | stdbuf -oL grep "127.0.0.1" | grep -v ".css" 
+0

Dziękuję Thor, również masz rację, ale myślę, że Shawn wszedł tam przed tobą. –