一部のコマンドでシステムログを取得する必要がある場合は、次のことが発生します。
$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]で。
ここに一つあります。協会拡張正規表現について