2014-09-26 3 views
0

я провел много часов, чтобы получить эту команду:Перенаправить вывод на Mulitple файлы с тройником и Grep

перенаправлять выход из сценария STDOUT + STDERR toLogfile 1 и Grep в логфайл 2

Первого logfile должен содержать полный вывод, а второй logfile - только 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

(сценарий Java через скрипт запущены при оболочке)

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

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

Я думаю, что проблема заключается в формате, timestamp, whitespac эс. Я думал, что grep 'word' поймает меня на обеих линиях, но это не так. Глупо.

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

не работает, log1 нормально, mysrctips.log пустые

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

хорошо работает в оболочке. но в совокупности все это не так.

выполнить сценарий> перенаправить на журнал 1> перенаправить и фильтровать (grep, egrep, sed, ..) Для входа 2

+1

Вы встречаете разные слова, как только «START» в следующий раз «Start» - так, что вы хотите grep? – jm666

+0

'START | END' - это текстовые шаблоны. Мне нравится grep «Start Script» и «Fin Script». – Memphis01

+0

Я попробовал sysntax, и это случилось. Но знаю, я думаю, что проблема другая. – Memphis01

ответ

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
  • Append в myscripts.log использование >>
  • egrep осуждается - поэтому лучше использовать grep -E

Кроме того, вместо grep вы можете использовать sed тоже например:

sed -nE '/(start script|fin Main-Job)/p' 
Смежные вопросы