2017-08-22 1 views
0

ich eine XML-Datei, die Linien ist sind wieändert Datumsformat in einem verschachtelten XML-Feld ohne XML-Parsing

... 
    <Placemark> 
     <name>ACME Pinerolo TO - 31/05/2017</name> 
    ... 
    </Placemark> 
... 
    <Placemark> 
     <name>SOME OTHER COMPANY Caselecchio BO - 21/06/2016</name> 
    ... 
    </Placemark> 
... 

    <Placemark> 

und das Endergebnis, die ich erreichen will ist

... 
    <Placemark> 
     <name>TO 170531 ACME Pinerolo TO</name> 
    ... 
    </Placemark> 
... 
    <Placemark> 
     <name>BO 160821 SOME OTHER COMPANY Caselecchio</name> 
    ... 
    </Placemark> 

ich denke, es ist möglich, awk, sed, xargs zu verwenden, ohne das XML zu analysieren, aber ich weiß nicht wie.

Antwort

1

Mit GNU sed für EREs und \ s + \ S:

$ sed -E 's:(<name>)(.*)\s+(\S+\s+)-\s+([0-9]+)/([0-9]+)/[0-9]{2}([0-9]+):\1\3\6\5\4 \2:' file 
... 
    <Placemark> 
     <name>TO 170531 ACME Pinerolo</name> 
    ... 
    </Placemark> 
... 
    <Placemark> 
     <name>BO 160621 SOME OTHER COMPANY Caselecchio</name> 
    ... 
    </Placemark> 
... 

    <Placemark> 

IDK, wie am Ende der 1 Zeile erscheinen "TO", aber nicht "BO" am Ende der anderen oder, wie man transformiere 21/**06**/2016 in 16**08**21 - Ich denke, das sind Tippfehler in Ihrer erwarteten Ausgabe.

Das oben genannte ist natürlich zerbrechlich und basiert auf der begrenzten Information und dem Beispiel in Ihrer Frage so YMMV, das es auf anderen Daten verwendet.

+0

Ja, Sie haben richtig geraten: Es war ein Tippfehler. Es funktioniert, danke –

+0

Nur aus Neugier, können Sie den _magic_ regex verwendet erklären? –

Verwandte Themen