如何阻止`grep`截断管道输出

use*_*038 4 bash pipe echo

有没有办法echo在管道的末尾简单地附加到当前输出而不是将其全部删除?例如,我如何保留我cat和的输出grep并将“END OF OUTPUT”添加到同一管道的输出末尾:

$ cat file.txt | grep 'foo' | echo "END OF OUTPUT"
something foo 
foo
foo something
END OF OUTPUT
Run Code Online (Sandbox Code Playgroud)

类似于如何cat -工作:

echo "START OF OUTPUT" | cat - file.txt
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 6

像这样:

{ grep foo file.txt; echo END OF OUTPUT; } > output.txt
Run Code Online (Sandbox Code Playgroud)

无需启动子shell即可对命令进行分组(Bourne shell除外)。

你可以这样做:

grep foo file.txt | cat - <(echo END OF OUTPUT) > output.txt
Run Code Online (Sandbox Code Playgroud)

(使用 ksh、bash 或 zsh)但这会创建更多额外的进程和管道,而没有额外的好处。