Regina Schaukrug: mysql: Frage zu now()

Beitrag lesen

Aber habe nicht verstanden, wie ich mittels sed now() ersetzen kann.

Hm. Ist jetzt schwierig zu wissen, WAS Du nicht verstanden hast. sed ist ein stream-Editor. Durch den kann man Daten schicken und in diesen sehr performant mit Regulären Ausdrücken Ersetzungen vornehmen. Die muss man natürlich erst mal lernen. Aber schon mit Grundwissen kann man da erstaunliche Ergebnisse erzielen!

Zeilen aus dem Log sehen wohl etwa so aus:

2018-07-27 13:01:02.124569 INSERT INTO FOO (bar,tok,time) values (100,200,now())
2018-07-27 13:01:03.987459 INSERT INTO FOO (bar,tok,time) values (130,90,now())

In einer Shell geht das mit einer Zeile so:

Einzelne Zeile:

echo '2018-07-27 13:01:02.124569 INSERT INTO FOO (bar, tok, time) values (100,200,now());' | sed -r 's/^([0-9-]+ [0-9:.]+) (.*)(now\(\))(.*)$/\2"\1"\4/';

Ergebnis:

INSERT INTO FOO (bar, tok, time) values (100,200,"2018-07-27 13:01:02.124569");

Für alle Zeilen einer Datei:

#!/bin/bash
sed -i'.backup' -r -e 's/^([0-9-]+ [0-9:.]+) (.*)(now\(\))(.*)$/\2"\1"\4/' DEINE_DATEI.log

Das würde in der Datei 'DEINE_DATEI.log' alle Zeilen umbauen und die ursprüngliche Datei mit der Endung .backup sichern.

#!/bin/bash
sed -r -e 's/^([0-9-]+ [0-9:.]+) (.*)(now\(\))(.*)$/\2"\1"\4/' < DEINE_DATEI.log > Datei.sql

Das würde versuchen, die Daten aus dem Logfile "DEINE_DATEI.log" zu lesen und SQL-Zeilen in eine Datei Datei.sql zu schreiben.

Hinweis:

Enthält Dein Lpgfile Daten mit Zeilenumbrüchen, die nicht maskiert im Logfile landen, dann ist ggf. weiterer Zauber nötig.