ubuntuusers.de

Datumsformat in die richtige Reihenfolge bringen

Status: Gelöst | Ubuntu-Version: Server 14.04 (Trusty Tahr)
Antworten |

levinus

Anmeldungsdatum:
15. Oktober 2015

Beiträge: 24

Hey, ich hab ein kleines Problem: Grundlegend will ich einige wenige Informationen aus einem von Google bezogenen iCal File beziehen und möglicherweise aufbereitet bereitstellen. In diesem Fall geht es erstmal darum, wann dieser Kalender zuletzt geupdated wurde. Also hole ich mir mit mittels

1
grep "LAST-MODIFIED"

und

1
head -n 1

das Bearbeitungsdatum des neuesten Termins (ist zwar nicht umbedingt das letzte Änderungsdatum, reicht für diesen Fall aber aus). Jetzt bekomme ich beispielsweise

1
LAST-MODIFIED:20160316T122204Z

heraus. Das ist, auch wenn ich das "LAST-MODIFIED:" mit sed einfach entferne nun wirklich keine schöne Zeitangabe. Wie kann ich diesen string denn jetzt so umstellen, dass am Ende am besten ein dd.mm.jjjj hh:mm rauskommt? Ich habe mich etwas zu sed umgesehen, jedoch keine Ausdrücke gefunden, die einzelne Zeichen innerhalb einer Zeile ansprechen. Irgendwelche Ideen?

MfG und einem Danke für Antworten, levinus

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Sowas kann man richtig schön mit awk erledigen (→ Einführung awk):

track@track:~$ awk '/LAST-MODIFIED:/ {print substr($0,15,4) "-" substr($0,19,2) "-" substr($0,21,2) " " substr($0,24,2) ":" substr($0,26,2) ":" substr($0,28,2); exit}'  test.ical
2016-03-16 12:22:04 

oder mit jedem einzelnen zeichen als "Wort":

track@track:~$ awk -F '' '/LAST-MODIFIED:/ {print $15 $16 $17 $18 "-" $19 $20 "-" $21 $22 " " $24 $25 ":" $26 $27 ":" $28 $29; exit}'  test.ical
2016-03-16 12:22:04 

Du siehst

  1. die Zeilenauswahl ist mit drin: /LAST-MODIFIED:/

  2. wie man das Zeug Stück für Stück zurechtformatieren kann

  3. statt head den Ausstieg nach dem 1. Treffer durch das exit

Das selbe geht natürlich auch mit sed (→ sed- manual), nur ist das mehr was für Freunde der kryptischen Kürzel: 😉

track@track:~$ sed -n '/LAST-MODIFIED:/ {s/.\{14\}\(....\)\(..\)\(..\).\(..\)\(..\)\(..\).*/\1-\2-\3 \4:\5:\6/p; q}'  test.ical
2016-03-16 12:22:04 

LG,

track

levinus

(Themenstarter)

Anmeldungsdatum:
15. Oktober 2015

Beiträge: 24

Wow, danke für die ausführliche Hilfe! Ich habe awk immer für zu "klobig" zum bedienen erachtet. Da war mein erster Eindruck wohl falsch. ^^ Ich konnte das ganze jetzt mit deinem ersten (teilweise modifizierten) Skript lösen, musste jede Angabe jedoch leider zweimal in der Datenbank ablegen, da mir das DATETIME Format von MySQL nicht gefällt... 😀

Dann mal Danke für deine Antwort, hat mir sehr weitergeholfen ☺

Antworten |