mysql: Frage zu now()
bearbeitet von Regina Schaukrug> 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](https://wiki.selfhtml.org/wiki/Regul%C3%A4rer_Ausdruck) Ersetzungen vornehmen. Die muss man natürlich erst mal lernen. Aber schon 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:
~~~bash
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:
~~~sql
INSERT INTO FOO (bar, tok, time) values (100,200,"2018-07-27 13:01:02.124569");
~~~
Für alle Zeilen einer Datei:
~~~bash
#!/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.
~~~bash
#!/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.