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
どうすればいいですか?
別の構文を試しましたが、動作しません。
出力は最初のログにのみリダイレクトされます。 2番目のログは空です。
./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
。サブシェルを起動します。
最終注文:
./run_test.sh 2>&1 | tee -a /var/log/log1.log | grep 'START\|END' > /var/log/myscripts.log