是sed阻止?

Rob*_*uld 12 unix sed pipe netcat

我的印象是sed没有阻挡,因为我说的时候:

iostat | sed
Run Code Online (Sandbox Code Playgroud)

sed 在数据到达时处理数据,但是当我这样做时

iostat | sed | netcat
Run Code Online (Sandbox Code Playgroud)

然后sednetcat.

我对吗?

Joa*_*uer 21

sed当它不打印到终端时将在缓冲模式下工作.这意味着它会在执行任何处理和默认输出之前尝试填充其内部缓冲区.

这样做是为了增加吞吐量,因为通常在管道中您不关心时序,但希望在给定时间内尽可能多地处理数据.

传递-u给sed将告诉它无缓冲工作,因此工作方式与输出到终端时的工作方式相同.


tva*_*son 5

除了@saua所说的之外,sed至少是面向行的,它读取一行,然后对其进行操作,因此它将始终缓冲至少一行。另外,sed可以工作在多行模式下。如果您使用多行模式,则sed无法输出其当前缓冲区,直到它知道该模式不适用或该模式已被处理。