Shell 使用tee和grep将输出重定向到多个文件
我花了很多时间让它运行: 将脚本STDOUT+STDERR的输出重定向到日志文件1和grep到日志文件2 第一个日志文件应该包含完整的输出,第二个日志文件只包含开始行和结束行(grep) 我尝试了不同的语法,但没有任何效果Shell 使用tee和grep将输出重定向到多个文件,shell,logging,grep,tee,Shell,Logging,Grep,Tee,我花了很多时间让它运行: 将脚本STDOUT+STDERR的输出重定向到日志文件1和grep到日志文件2 第一个日志文件应该包含完整的输出,第二个日志文件只包含开始行和结束行(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/l
./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)
我想在myscripts.log中对此进行grep
26.09.2014 20:38:51 | start script > load_stats.sh
26.09.2014 20:39:23 | fin script > load_stats.sh
我认为问题在于格式、时间戳和空格。
我原以为格雷普的“单词”会抓住我这两行,但事实并非如此。
愚蠢的
不工作,日志1正常,mysrctips.log为空
tail -f -n 500 /var/log/log1.log | sed -nE '/(start script|end script)/p'
在外壳中工作良好。但综上所述,情况并非如此
执行脚本>重定向到日志1>重定向并过滤(grep、egrep、sed等)到日志2这对我来说很好:
$ 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
$cat这应该行得通
./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
如果需要
- 覆盖/创建日志1-删除
-a
- 附加到myscripts.log
使用>
egrep
,因此最好使用grep-E
sed
来代替grep
,例如:
sed -nE '/(start script|fin Main-Job)/p'
你用灰色显示不同的单词,一次
START
下一次START
-那么,你想要的是grep?“START | END”是文本模式。我喜欢grep“开始脚本”和“Fin脚本”。我尝试了sysntax,同样的情况也发生了。但是我知道我认为问题是另一个。对不起,“主要工作”是调试中的一句话。开始和结束是“星脚本”和“结束脚本”对不起,更改文本。我试图添加,但我必须从行中删除个性化数据,因此我必须稍后编辑行
26.09.2014 20:38:51 | start script > load_stats.sh
26.09.2014 20:39:23 | fin Main-Job > load_stats.sh
sed -nE '/(start script|fin Main-Job)/p'