2014-09-26 76 views
0

我花了很多時間來得到這個運行:輸出重定向到多張文件與發球和grep

從腳本STDOUT + STDERR toLogfile 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/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完整

(腳本是經由外殼腳本的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到grep此.log

26.09.2014 20:38:51 |  start script > load_stats.sh 
26.09.2014 20:39:23 |   fin script > load_stats.sh 

我認爲問題是格式,時間戳,whitespac ES。 我認爲grep'word'會把這兩條線都吸引住我,但事實並非如此。 愚蠢的。

./run.sh 2>&1 | tee -a /var/log/log1.log | sed -nE '/(start script|end script)/p' >> /var/log/myscripts.log 

沒有工作,log1中確定,在shell mysrctips.log空

tail -f -n 500 /var/log/log1.log | sed -nE '/(start script|end script)/p' 

效果很好。但所有它沒有組合。

執行腳本>重定向到日誌1>重定向和過濾(grep,egrep,sed,..)登錄2

+1

你grepping不同的單詞,一旦'開始'下次'開始' - 所以,你想要什麼grep? – jm666 2014-09-26 18:28:21

+0

'開始|結束'是文本模式。我喜歡grep「啓動腳本」和「Fin腳本」。 – Memphis01 2014-09-26 18:30:48

+0

我嘗試了sysntax,發生了同樣的情況。但知道我認爲這個問題是另一回事。 – Memphis01 2014-09-26 18:40:59

回答

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 
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 

如果想

  • 覆蓋/創建LOG1 - 刪除-a
  • 追加到myscripts.log使用>>
  • egrep已經過時 - 因此最好使用grep -E

而且,代替grep可以使用sed過,像:

sed -nE '/(start script|fin Main-Job)/p'