Ich habe das allgemeine MySQL-Protokoll aktiviert und protokolliere seit einer Woche jede Transaktion. Außerdem läuft alle 5 Minuten ein Cronjob, der einige MySQL-Transaktionen ausführt, was mein Protokoll verunreinigt. Ich würde gerne wissen, wie ich diese Einträge aus meinem Protokoll entfernen kann, damit es sauberer aussieht.
Die sich wiederholenden Einträge von Cron sehen folgendermaßen aus:
160614 16:45:01 36 Connect user@localhost on
36 Init DB db1
36 Query SELECT FROM status_history as sh INNER JOIN (SELECT work_order_i
d, MAX(status_changed) AS MaxDateTime FROM status_history GROUP BY work_order_id) as groupedsh ON sh.work_order_id = groupedsh.work_o
JOIN rchetype_work_order_views AS wov ON wo.id = wov.work_order_id
WHERE wov.viewed = 0 AND sh.status_id IN (SELECT status_id FROM rchetype_status_completed)
36 Quit
Ich dachte daran, sed zu verwenden, aber das Problem ist, dass die erste Zeile offensichtlich ein anderes Datum und eine andere Transaktionsnummer (in diesem Fall 36) hat und ich möchte alle Zeilen löschen, bis das erste Quit am Ende gefunden wird. Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, dies zu tun. Ich suche nur nach Ideen.
Antwort1
Unter der Annahme, dass es sich immer um die gleiche Anzahl von Zeilen handelt, können Sie etwa Folgendes tun: Dadurch werden die enthaltene Zeile und die folgenden 7 Zeilen aus der Datei „log.file“ in Ihrem aktuellen Verzeichnis
sed '/Connect\s*user@localhost on/,+7d' log.file
entfernt .Connect user@localhost on
Bearbeiten: Die endgültige Lösung (also zumindest gut genug, damit der OP sie nach seinem Geschmack ändern kann) finden Sie in den Kommentaren.