Linux 重定向std_out,std_err with(out)grep

Linux 重定向std_out,std_err with(out)grep,linux,bash,stdout,stderr,io-redirection,Linux,Bash,Stdout,Stderr,Io Redirection,我在Linux中遇到了一些重定向问题, 这里有一个小示意图来说明目标,比文字更好(我希望) 我想用脚本的输出来实现这一点。 我成功地用grep执行了log.log和error.log ./script.sh >log.log 2> >(grep -v "Expression" > error.log ) 但是我在histo.log中遇到了麻烦,它应该在其中添加(我的意思是>>或tee-a not>)std_out和std_err(没有grep),我并不真正理解重定向的高

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

我想用脚本的输出来实现这一点。 我成功地用grep执行了log.log和error.log

./script.sh >log.log 2> >(grep -v "Expression" > error.log )
但是我在histo.log中遇到了麻烦,它应该在其中添加(我的意思是>>或tee-a not>)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文件,如您在图表中所示。

非常感谢,我错过了先tee然后grep的想法。再次感谢更多,我想在histo.log中添加空白行。我添加了
echo`>>histo.log
,但似乎是先添加一行,然后在日志和错误日志之间添加,有什么线索吗?
$ 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