Shell 如何使用grep将stdout拆分为stdout和stderr?

Shell 如何使用grep将stdout拆分为stdout和stderr?,shell,grep,Shell,Grep,我的程序输出到标准输出。但是,我想显示一些输出,只显示其余部分的md5sum(测试目的)。我认为这应该比我目前得到的更简单: program | tee >( grep -P 'pattern' >&2 ) | grep -vP 'pattern' | md5sum regexp模式冗长、乏味且不断变化,因此如果不必重复的话,我更愿意这样做。最好是grep(或另一个我不知道或不想的命令)有一个将未命中重定向到stderr的选项。您可以使用perl匹配模式并将其写入标准错误流

我的程序输出到标准输出。但是,我想显示一些输出,只显示其余部分的
md5sum
(测试目的)。我认为这应该比我目前得到的更简单:

program | tee >( grep -P 'pattern' >&2 ) | grep -vP 'pattern' | md5sum

regexp
模式
冗长、乏味且不断变化,因此如果不必重复的话,我更愿意这样做。最好是
grep
(或另一个我不知道或不想的命令)有一个将未命中重定向到stderr的选项。

您可以使用
perl
匹配模式并将其写入标准错误流,只需使用
print

program | perl -ne '$fh = (/pattern/ ? STDERR : STDOUT); print $fh $_' | md5sum

另外,由于使用了
perl
,PCRE库默认内置在正则表达式匹配下使用
/../

Yes。或者只是
程序| perl-pe'select/pattern/?STDERR:STDOUT'
(对于大型输出可能较慢)