여러 로그 파일에서 tee 및 grep 출력 리디렉션

여러 로그 파일에서 tee 및 grep 출력 리디렉션

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

관련 정보