miałem wrażenie, sed nie blokuje, bo kiedy ja mówię:Czy blokuje się sed?
iostat | sed
sed
przetwarza dane, ponieważ przybywa, ale kiedy robię
iostat | sed | netcat
Następnie sed
bloki netcat
.
Mam rację?
miałem wrażenie, sed nie blokuje, bo kiedy ja mówię:Czy blokuje się sed?
iostat | sed
sed
przetwarza dane, ponieważ przybywa, ale kiedy robię
iostat | sed | netcat
Następnie sed
bloki netcat
.
Mam rację?
sed
będzie działać w trybie buforowym, gdy nie drukuje do terminala. Oznacza to, że będzie próbował wypełnić swój wewnętrzny bufor przed domyślnym przetworzeniem i wydrukiem.
Robi się to w celu zwiększenia przepustowości, ponieważ zwykle w rurze nie zależy Ci na czasie, ale chcesz, aby jak najwięcej danych było przetwarzanych w danym czasie.
Przekazanie -u
do sed spowoduje, że będzie pracować w trybie niebuforowanym, dlatego działa tak samo, jak działa, gdy wyjście przechodzi do terminala.
ja nie wiem, czy rozumiem pytanie rację, ale w swoim przykładzie, powinno być tak:
Poza tym, sed nie powinien potrzebować czytać wszystkich swoich danych wejściowych, aby wyprodukować dane wyjściowe.
Czy obserwuje się opóźnienia, których nie można wytłumaczyć, a niektóre niewielkie buforowanie?
Oprócz tego, co mówi @saua, sed
jest co najmniej zorientowany liniowo, że czyta wiersz, a następnie operuje na nim, więc zawsze będzie buforował co najmniej jedną linię. Ponadto sed
może pracować w trybie wielowierszowym. Jeśli używasz wzorca wielowierszowego, to sed
nie może wyprowadzić bieżącego bufora dopóki nie będzie wiedział, że wzorzec albo nie ma zastosowania, albo wzorzec został przetworzony.
stdbuf
może pomóc w zmianie zachowania buforowego standardowych strumieni io. Można próbować to zmienić zachowanie buforowania:
... | stdbuf -oL -eL sed -e ... | ...
sed: nielegalną opcję - u – CommaToast
@CommaToast: następnie użyć GNU sed lub dowiedzieć się, czy smak sed ma równoważną opcję (i po to tutaj jako odpowiedź, kiedy to robisz). –
W moim kompu MacOSX brakuje '-u', ale' -l' działa na buforowanie linii, co jest preferowane. – Umbrella