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
어떻게 해야 하나요?
다른 구문을 시도했지만 작동하지 않습니다.
출력은 첫 번째 로그로만 리디렉션됩니다. 두 번째 로그는 비어 있습니다.
./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