동적으로 여러 파일을 grep하고 출력을 사용자 정의

동적으로 여러 파일을 grep하고 출력을 사용자 정의

2개의 다른 로그 파일을 모니터링하고 싶습니다(이벤트가 로그에 나타날 때).

tail -f /var/log/file1 -f /var/log/file2  

각 파일에 대해 몇 가지 패턴을 파악하고 싶습니다.

tail -f /var/log/file1 | grep '\(pattern1\|pattern2\)'  
tail -f /var/log/file2 | grep '\(pattern3\|pattern4\|pattern5\)' 

이 모든 것을 함께 작동시키는 방법을 모르겠습니다. 또한 file1 로그 출력을 빨간색으로, file2 로그 출력을 파란색으로 인쇄하고 싶습니다.

마찬가지로 파일(이 포럼에서 가져온 일부)을 사용하여 이 작업을 수행할 수 있습니다.

RED='\033[0;31m'
BLUE='\033[0;34m'  

tail -fn0 /var/log/file1 | while read line;
    do
       if echo $line | grep -q '\(pattern1\|pattern2\)';then
          echo -e "{$RED}$line"
       fi
    done

하지만 여러 파일로 이 작업을 수행하는 방법을 전혀 모르겠습니다. 어떤 아이디어가 있나요?

답변1

동시에 여러 로그를 구문 분석하려면 다음 구문을 사용할 수 있습니다.

tail -f /var/log/{log1,log2}

이렇게 하면 필요한 모든 로그의 원하는 출력이 생성되므로 매개변수를 사용 -e하여 grep여러 스키마를 생성할 수 있습니다. 그럼 모두 함께:

tail -f /var/log/{log1,log2} | grep -ie "pattern1" -ie "pattern2" -ie "pattern3"

grep으로 색칠하려면 살펴보세요.이것훌륭한 답변입니다.

답변2

 tail -n 0 -f file1 file2 |
   awk -v file1pattern="pattern1|pattern2" -v file2pattern="pattern3|pattern4" \
  '/^==> file1 <==$/ { print "\033[0;31m"; pattern=file1pattern };
   /^==> file2 <==$/ { print "\033[0;34m"; pattern=file2pattern }; $0 ~ pattern'

답변3

해결책은 다음과 같습니다(Kit 씨와 Duck 씨에게 감사드립니다).

Awk trailing -f를 사용하여 출력 색상만 지정하고 나머지 출력은 표시하려면 어떻게 해야 합니까?

관련 정보