重定向 std_out、std_err with(out) grep

Redirection std_out, std_err with(out) grep

我在 Linux 中遇到重定向问题, 这里有一个小示意图来说明目标,胜于文字(我希望)

+------------+                              +----------------+
|   std_out  +----------+------------------>+     log.log    |
+------------+          |                   +----------------+
                        |
                        |                   +----------------+
                        +----------------->>+                |
                                            |   histo.log    |
                        +----------------->>+                |
                        |                   +----------------+
                        |
                        |
 +------------+         |   grep -v "exp"   +----------------+
 |   std_err  +---------+------------------>+   error.log    |
 +------------+                             +----------------+

我想用脚本的输出来做到这一点。 我成功地用 grep log.log 和 error.log

./script.sh >log.log 2> >(grep -v "Expression" > error.log )

但我在 histo.log 应该添加的地方遇到了麻烦(我的意思是 >> 或 tee -a 而不是 >)std_out 和 std_err(没有 grep)而且我不太了解重定向的高级内容。

如果有人有办法解决我的问题,我将不胜感激:)

这是一个可怕的输出过程替换用法:

$ cat driver.sh
echo line 1 to stdout
echo line 1 to stderr >&2
echo line 2 to stderr is expected >&2
echo line 3 to stderr >&2

$ sh driver.sh > >(tee -a histo.log > log.log) 2> >(tee -a histo.log | grep -v exp > error.log)

$ cat log.log
line 1 to stdout

$ cat histo.log
line 1 to stdout
line 1 to stderr
line 2 to stderr is expected
line 3 to stderr

$ cat error.log
line 1 to stderr
line 3 to stderr

这将附加到histo.log,但覆盖log.log和error.log文件,正如您在图表中指出的那样。