我花了很多时间才能让它运行起来:
将输出从脚本STDOUT + STDERR重定向到Logfile 1,将grep重定向到Logfile 2
第一个日志文件应该包含完整的输出,第二个日志文件只包含Start和End-Lines(grep)。
我尝试了不同的语法,但没有任何作用。
./run.sh 2>&1 | tee -a /var/log/log1.log | (grep 'START|END') > /var/log/myscripts.log
./run.sh 2>&1 | tee -a /var/log/log1.log | grep 'Start' > /var/log/myscripts.log
./run.sh 2>&1 | tee -a /var/log/log1.log | egrep 'Start' > /var/log/myscripts.log
./run.sh 2>&1 | tee -a /var/log/log1.log | grep -E 'Start' > /var/log/myscripts.log
输出将仅重定向到第一个日志。第二个日志是空的。
我不知道为什么;你有什么想法吗?
示例 - 输出行
这应该在log1.log
中完成(脚本是通过shell脚本的java startet)
26.09.2014 20:38:51 | start script > load_stats.sh
26.09.2014 20:38:51 | [DB DATA]
26.09.2014 20:38:51 | Host > locahost
26.09.2014 20:38:51 | User > leroy
... more ...
26.09.2014 20:39:23 | fin script > load_stats.sh
我想在myscripts.log
中使用grep26.09.2014 20:38:51 | start script > load_stats.sh
26.09.2014 20:39:23 | fin script > load_stats.sh
我认为问题是格式,时间戳,空格。 我认为grep'word'会抓住这两条线,但事实并非如此。 笨
./run.sh 2>&1 | tee -a /var/log/log1.log | sed -nE '/(start script|end script)/p' >> /var/log/myscripts.log
无效,log1 ok,mysrctips.log为空
tail -f -n 500 /var/log/log1.log | sed -nE '/(start script|end script)/p'
在shell中运行良好。但结合所有它没有。
执行脚本>重定向到日志1>重定向和过滤(grep,egrep,sed,..)到log 2
答案 0 :(得分:0)
这对我来说很好用:
$ cat <<_DATA | tee out1 | grep -E 'START|END' > out2
hello
START1
foo
END2
bar
_DATA
$ cat out1
hello
START1
foo
END2
bar
$ cat out2
START1
END2
答案 1 :(得分:0)
这应该有效
./run_test.sh 2>&1 | tee -a /var/log/log1.log | grep -E 'start script|fin Main-Job' > /var/log/myscripts.log
# ^^ append ^^^^^^^ - same as egrep ^overwrite/create
打印
26.09.2014 20:38:51 | start script > load_stats.sh
26.09.2014 20:39:23 | fin Main-Job > load_stats.sh
如果想要
-a
myscripts.log
使用>>
egrep
此外,您也可以使用grep -E
代替grep
,例如:
sed