我的程序输出到stderr
和stdout
。我想在stderr
和中 grep “pattern” stdout
。我希望将其余部分发送到/dev/null
。
如果我在重定向之后进行管道传输stderr
:./prog 2>/dev/null | grep "pattern"
我得不到stderr
包含“模式”的行。
如果我在重定向之前进行管道传输stderr
:./prog | grep "pattern" 2>/dev/null
没有一个stderr
被重定向到/dev/null
感谢您的帮助。
答案1
如果您不关心字符串匹配是源自 stdout 还是 stderr,那么只需通过将 stderr 重定向到 stdout 来合并两个流,然后执行 grep:
$ your_program 2>&1 | grep "pattern"
该示例在 sh、bash、ksh、zsh 中有效。csh 应该是:
$ your_program |& grep "pattern"
答案2
./prog 2>&1 | grep pattern
您必须只看到包含“pattern”的行