我有兴趣在grep
输出中保留输入的标题,就像问题Include header in the 'grep' result一样。
尽管在问题中提出了一个有效的解决方案(使用sed
),answer with most upvotes引起了我的注意。例如,它允许使用grep --color
。它建议使用命令head
和grep
将输入汇总到command group,例如:
ps -ef | { head -1; grep python; }
但是,如链接的答案和注释中所写,这不适用于管道左侧的所有命令。它适用于ps
或lsof
,但不适用于df
,ls
和其他人。使用它们时,仅打印组中第一个命令的输出:
$ df | { head -1; grep '/'; }
Filesystem 1K-blocks Used Available Use% Mounted on
$
有人可以解释为什么管道到命令组只适用于某些命令吗?有什么方法可以让它普遍起作用吗?
答案 0 :(得分:1)
您的问题的答案位于comments of the linked answer。
显然
ps -e
首先发送标题行,然后不发送任何内容,然后缓冲输出的其余部分。head
必须认为该流在第一行后关闭,因此它会退出,让grep
看到其余的。
它只能偶然发挥作用。
有没有办法让它普遍适用?
一切皆有可能,但是,您可能需要重新编码并重新编译其他所有内容。所以...不可能,对不起。