ho avuto l'impressione sed non è stato il blocco, perché quando io dico:Il blocco sed è?
iostat | sed
sed
elabora i dati man mano che arrivano, ma quando lo faccio
iostat | sed | netcat
Poi sed
blocchi netcat
.
ho ragione?
ho avuto l'impressione sed non è stato il blocco, perché quando io dico:Il blocco sed è?
iostat | sed
sed
elabora i dati man mano che arrivano, ma quando lo faccio
iostat | sed | netcat
Poi sed
blocchi netcat
.
ho ragione?
sed
funzionerà in modalità bufferizzata quando non viene stampato su un terminale. Ciò significa che proverà a riempire il suo buffer interno prima di eseguire qualsiasi elaborazione e output per impostazione predefinita.
Questo viene fatto per aumentare il throughput, perché normalmente in un tubo non ti interessa il tempo, ma vuoi quanti più dati elaborati in un dato momento il più possibile.
Passare a -u
per sed dire che funziona senza buffer, quindi funziona nello stesso modo in cui funziona quando l'output viene inviato a un terminale.
Non so se ho capito la domanda giusta, ma nel tuo esempio, dovrebbe essere simile a questo:
Oltre a questo, sed non dovrebbe avere bisogno di leggere tutto il suo input per produrre output.
Osservate ritardi che non possono essere spiegati da questo e da qualche piccolo buffering?
In aggiunta a ciò che @saua dice, sed
è almeno orientato alla linea, che legge una linea, quindi opera su di esso in modo che sarà sempre il buffering di almeno una riga. Inoltre, sed
può funzionare in modalità multilinea. Se si utilizza un modello multilinea, sed
non può stampare il buffer corrente fino a quando non sa che il modello non si applica o il motivo è stato elaborato.
stdbuf
può aiutare con la modifica del comportamento di buffer dei flussi io standard. Si può provare questo per modificare il comportamento di tamponamento:
... | stdbuf -oL -eL sed -e ... | ...
sed: opzione illegale - u – CommaToast
@CommaToast: quindi utilizzare GNU sed o scoprire se il sapore di sed ha un'opzione equivalente (e post qui come una risposta, quando lo fai). –
Sul mio comp MacOSX, '-u' manca, ma' -l' funziona per il buffering di linea, che è preferito. – Umbrella