如何将 stderr 和 stdout 的一部分重定向到 /dev/null

Jav*_*Jav 1 grep redirection stderr pipe stdout

我的程序输出到stderrstdout。我想在stderr和 中搜索“模式” stdout。我希望将其余部分发送到/dev/null.

如果我在重定向后使用管道stderr./prog 2>/dev/null | grep "pattern" 我没有得到stderr包含“模式”的行。

如果我在重定向之前使用管道stderr./prog | grep "pattern" 2>/dev/null 没有一个stderr被重定向到/dev/null

感谢您的帮助。

小智 7

如果您不关心字符串匹配是来自 stdout 还是 stderr,则只需通过将 stderr 重定向到 stdout 来合并两个流,然后执行 grep:

$ your_program 2>&1 | grep "pattern"
Run Code Online (Sandbox Code Playgroud)

该示例适用于 sh、bash、ksh、zsh。csh 应该是:

$ your_program |& grep "pattern"
Run Code Online (Sandbox Code Playgroud)