2017-08-22 1 views
0

J'ai un fichier XML qui ses lignes sont commechangement format de date dans un champ XML imbriqué sans analyse syntaxique xml

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

    <Placemark> 

et le résultat final que je veux atteindre est

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

Je pense qu'il est possible d'utiliser awk, sed, xargs, sans analyser le XML mais je ne sais pas comment.

Répondre

1

Avec GNU sed pour ERE et \ s + 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 comment faire "TO" apparaît à la fin de 1 ligne, mais pas "BO" à la fin de l'autre ou comment transformer 21/**06**/2016 en 16**08**21 - Je pense que ce sont des fautes de frappe dans votre sortie attendue. Ce qui précède est, bien sûr, fragile et basé sur l'information limitée et l'exemple dans votre question si YMMV l'utiliser sur d'autres données.

+0

Oui, vous avez deviné: c'était une faute de frappe. Cela fonctionne, merci –

+0

Juste pour la curiosité, pouvez-vous expliquer le _magic_ regex utilisé? –