複数行の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つ以上の行(){1、}は開始されません。数字[^0-9]で。

ここに一つあります。協会拡張正規表現について

関連情報