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

标签 shell grep

我的程序输出到标准输出。不过,我想按原样显示一些输出,并仅显示其余输出的 md5sum (测试目的)。我认为这应该比我到目前为止得到的更简单:

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

正则表达式模式很长、乏味并且不断变化,所以我宁愿不必重复它。最好的情况是 grep (或另一个我不知道或没有想到的命令)有一个将未命中重定向到 stderr 的选项。

最佳答案

您可以使用 perl 来匹配模式并将其写入标准错误流,只需在 STDERR 前面添加 print

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

也是因为使用了perl,默认内置了PCRE库,在正则表达式匹配/../下使用

关于shell - 如何使用 grep 将 stdout 拆分为 stdout 和 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089213/

相关文章:

linux - UNIX Case 语句中的模式匹配

bash - 在一列整数 BASH 中每 5 行相加

grep - 在处理实际的 grep 输出之前打印出匹配的词

bash - 提取出现在特定单词之后的单词

arrays - 评估命令的颜色格式输出

linux - 执行本地 shell 命令后退出 lftp

linux - 如何在管道的两侧使用 sudo -u

logging - 使用 grep 过滤命令输出

linux - 查找某些字符串序列的出现次数

bash - 使用 grep xargs sed 更有效地在文件中生成 UUID