将脚本 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