重定向 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文件,正如您在图表中指出的那样。
我在 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文件,正如您在图表中指出的那样。