小编Ant*_*ela的帖子

为什么从管道读取时“sed q”的工作方式不同?

我创建了一个名为“test”的测试文件,其中包含以下内容:

xxx
yyy
zzz
Run Code Online (Sandbox Code Playgroud)

我运行了命令:

(sed '/y/ q'; echo aaa; cat) < test
Run Code Online (Sandbox Code Playgroud)

我得到了:

xxx
yyy
aaa
zzz
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

cat test | (sed '/y/ q'; echo aaa; cat)
Run Code Online (Sandbox Code Playgroud)

并得到:

xxx
yyy
aaa
Run Code Online (Sandbox Code Playgroud)

sed读取并打印,直到遇到带有 'y' 的行,然后停止。在第一种情况下,但不是第二种情况,cat 读取并打印其余部分。

有人可以解释这种行为差异背后的现象吗?

我还注意到它在 Ubuntu 16.04 和 Centos 6 中以这种方式工作,但在 Centos 7 中,这两个命令都没有打印“zzz”。

pipe sed

25
推荐指数
1
解决办法
3843
查看次数

标签 统计

pipe ×1

sed ×1