重定向多个日志文件的 tee 和 grep 输出

重定向多个日志文件的 tee 和 grep 输出

将脚本 STDOUT + STDERR 的输出重定向到Logfile 1并将 grep 重定向到Logfile 2

./run_test.sh 2>&1 | tee -a /var/log/log1.log | (grep 'START|END') > /var/log/myscripts.log

我怎样才能做到这一点?

我尝试了不同的语法,但它不起作用。

输出将仅重定向到第一个日志。第二个日志是空的。

./run.sh 2>&1 | tee -a ~/log1.log | grep 'Start' > /var/log/myscripts.log
./run.sh 2>&1 | tee -a ~/log1.log | egrep 'Start' > /var/log/myscripts.log
./run.sh 2>&1 | tee -a ~/log1.log | grep -E 'Start' > /var/log/myscripts.log

log1.log包含输出。myscripts.log是空的。

答案1

您不需要(或不想要)那里的括号。此外,grep逻辑 OR 的语法是grep 'foo\|bar。你需要转义|除非你使用-E.因此,其中任何一个都可以:

./run_test.sh 2>&1 | tee -a log1.log | grep 'START\|END' > myscripts.log

或者

./run_test.sh 2>&1 | tee -a log1.log | grep -E 'START|END' > myscripts.log

或者

./run_test.sh 2>&1 | tee -a log1.log | grep -P 'START|END' > myscripts.log

答案2

您尝试的方法或多或少是正确的。

  • grep模式不是这样工作的。以下方法可行:

    egrep 'START|END'
    grep -E 'START|END'
    grep 'START\|END'
    
  • 调用周围grep不需要括号。他们会启动一个子shell。

最终命令:

./run_test.sh 2>&1 | tee -a /var/log/log1.log | grep 'START\|END' > /var/log/myscripts.log

相关内容