J'ai eu l'impression sed ne bloquait pas, parce que quand je dis:Est-ce que sed bloque?
iostat | sed
sed
traite les données qu'il arrive, mais quand je fais
iostat | sed | netcat
Puis sed
blocs netcat
.
Ai-je raison?
J'ai eu l'impression sed ne bloquait pas, parce que quand je dis:Est-ce que sed bloque?
iostat | sed
sed
traite les données qu'il arrive, mais quand je fais
iostat | sed | netcat
Puis sed
blocs netcat
.
Ai-je raison?
sed
fonctionnera en mode tampon lorsqu'il n'imprime pas sur un terminal. Cela signifie qu'il va essayer de remplir son buffer interne avant d'effectuer tout traitement et de sortir par défaut. Ceci est fait pour augmenter le débit, car normalement dans un tuyau, vous ne vous souciez pas de la synchronisation, mais vous voulez que le plus de données possible soit traité dans un temps donné. En passant -u
à sed lui dira de travailler sans tampon, fonctionnant de la même manière que cela fonctionne quand la sortie va à un terminal.
Je ne sais pas si je comprends bien la question, mais dans votre exemple, il devrait ressembler à ceci:
Autre que cela, sed ne devrait pas avoir besoin de lire toutes ses entrées pour produire une sortie.
Observez-vous des retards qui ne peuvent pas être expliqués par ceci et une petite mise en mémoire tampon?
En plus de ce que dit @saua, sed
est au moins orienté ligne, qu'il lit une ligne, puis qu'il opère de telle sorte qu'il tamponne toujours au moins une ligne. En outre, sed
peut fonctionner en mode multiligne. Si vous utilisez un motif multiligne, alors sed
ne peut pas sortir son tampon courant jusqu'à ce qu'il sache que le motif ne s'applique pas ou que le motif a été traité.
stdbuf
peut aider à modifier le comportement de mise en mémoire tampon des flux io standard. Vous pouvez essayer de changer le comportement de mise en mémoire tampon:
... | stdbuf -oL -eL sed -e ... | ...
sed: l'option illégale - u – CommaToast
@CommaToast: alors soit utiliser GNU sed ou savoir si votre goût de Sed a une option équivalente (et l'afficher ici une réponse, quand vous faites). –
Sur ma compilation MacOSX, '-u' est manquant, mais' -l' fonctionne pour la mise en mémoire tampon, ce qui est préférable. – Umbrella