Datum aus einem Dateinamen extrahieren

Datum: 2004-03-27
Quelle: suse-linux

Worum ging es?

Aus einem Dateinamen der Form film2004.03.27_15-47-12.avi soll das Datum im Format DD.MM.YYYY HH:MM extrahiert werden.

Code
# einfache reguläre Ausdrücke / basic regular expressions
echo film2004.03.27_15-47-12.avi | sed \
's/^.*\([12][0-9]\{3,3\}\)\.\([01][0-9]\)\.'\
'\([0-3][0-9]\)_\([0-2][0-9]\)-\([0-5][0-9]\).*$/'\
'\3.\2.\1 \4:\5/'
# erweiterte reguläre Ausdrücke / extended regular expressions
echo film2004.03.27_15-47-12.avi | sed -r \
's/^.*([12][0-9]{3,3})\.([01][0-9])\.([0-3][0-9])_'\
'([0-2][0-9])-([0-5][0-9]).*$/\3.\2.\1 \4:\5/'
Beschreibung

Die Lösung beruht darauf, dass der Teil des Dateinamens, der zur Ausgabe des Datums genutzt werden soll (also im Beispiel 2004.03.27_15-47, möglichst genau durch einen regulären Ausdruck beschrieben wird, der Rest vor und nach diesem Teil wird ignoriert. Die Version mit erweiterten regulären Ausdrücken habe ich ergänzt, sie ist etwas übersichtlicher. Nebenbei zeigt das Beispiel, wie man überlange sed-Zeilen zerlegen kann.