여러 줄의 postgresql 로그를 수집하는 방법은 무엇입니까?

여러 줄의 postgresql 로그를 수집하는 방법은 무엇입니까?

일부 명령에 대해 시스템 로그를 검색해야 하는 경우 다음과 같은 일이 발생합니다.

$cat /var/log/postgresql/postgresql-9.1-main.log | grep 'UPDATE limit'
8833 2017-02-01 12:31:51 BRST [email protected] anotherdb LOG:  comando: UPDATE limit
5067 2017-02-02 17:38:27 BRST [email protected] thisdb LOG:  comando: UPDATE limit

하지만 완전한 명령이 필요합니다. pcggrep, agrep, grep과 같은 많은 명령을 시도하고 있지만 성공하지 못합니다.

예상 결과는 다음과 같아야 합니다(쿼리되는 행 수가 다를 수 있음).

8833 2017-02-01 12:31:51 BRST [email protected] anotherdb LOG:  comando: UPDATE limit
                        SET xxx = xxx
                        FROM xxx
                          JOIN xxx ON xxx = xxx AND xxx = xxx
                          JOIN xxx ON xxx = xxx AND xxx = '012017'
                        WHERE xxx = xxx and xxx = 13
5067 2017-02-02 17:38:27 BRST [email protected] thisdb LOG:  comando: UPDATE limit
                        SET xxx = xxx
                        FROM xxx
                          JOIN xxxx ON xxx = xxx AND xxx = xxx

나는 pcggrep 및 agrep을 시도했지만 시작 패턴 또는 끝 패턴과 같은 것을 기대하지만 포르투갈어로 된 기본 postgresql 구성인 끝 패턴이 없는 것 같지만 눈으로 보면 새 줄이 이 숫자에서 시작되는 것을 볼 수 있습니다 8833 또는 5067.

답변1

사용하려면 pcregrep다음을 시도하십시오.

pcregrep -iM "^[0-9]+.*UPDATE limit.*\n(^[^0-9].*\n){1,}" /var/log/postgresql/postgresql-9.1-main.log

-i는 대소문자를 구분하지 않습니다.
-M은 여러 줄을 의미합니다.

검색해야 하는 다른 유형의 쿼리에 대해 "UPDATE 제한" 문자열을 변경할 수 있습니다.

기본적으로 정규식은 다음과 같습니다. 하나 이상의 숫자로 시작하는 모든 줄을 찾은 다음 문자열, 쿼리, 줄 끝까지 문자열이 뒤따른 다음 1개 이상의 줄(){1, }이 시작되지 않습니다. 숫자 [^0-9]로.

여기 하나 있어요협회확장 정규 표현식에 대해

관련 정보