Find and replace in xml

Hi All,

My XML file looks like below:

<logEvent xsi:type="logservice:LogEvent"  timestamp="1394713811052" severity="3" messageCode="TM_6228" message="Writing session output to log file ." user="" stacktrace="" service="" serviceType="IS" clientNode="dev" pid="712" threadName="DIRECTOR" context="">
</logEvent>
<logEvent xsi:type="logservice:LogEvent"  severity="3" messageCode="TM_6228" message="Writing session output to log file ." timestamp="1394713811052" user="" stacktrace="" service="" serviceType="IS" clientNode="" pid="712" threadName="DIRECTOR" context="">
</logEvent>
<logEvent xsi:type="logservice:LogEvent"  severity="3" messageCode="VAR_27028" message="Use override value" user="" stacktrace="" service="" serviceType="IS" clientNode="" pid="712" threadName="DIRECTOR" context="" timestamp="1394713811060">
</logEvent>

The timestamp value above is epoch time. I know how to convert epoch time to readbale format using date command. I want to replace the epoch timestamp value in the xml with readable date format[using date command]

The position of timestamp in the XML varies. How do i find and replace in this case. Please help in resolving this.

Regards,

Try:

perl -slpe 'use POSIX;/(timestamp=")([^"]+)/;$ts=strftime "$fmt", gmtime $2/1000;s/(timestamp=")([^"]+)/$1$ts/' -- -fmt="%Y-%m-%d %H:%M" file.xml

Replace the format at the end of that command with whatever format you would pass to date .

If awk is fine for you try this

$ awk -F 'timestamp="' 'NF>1{s=$2;sub(/".*/,"",s);sub(s,strftime("%d-%h-%Y %H:%M:%S",s/1000))}1' file

<logEvent xsi:type="logservice:LogEvent"  timestamp="13-Mar-2014 18:00:11" severity="3" messageCode="TM_6228" message="Writing session output to log file ." user="" stacktrace="" service="" serviceType="IS" clientNode="dev" pid="712" threadName="DIRECTOR" context="">
</logEvent>
<logEvent xsi:type="logservice:LogEvent"  severity="3" messageCode="TM_6228" message="Writing session output to log file ." timestamp="13-Mar-2014 18:00:11" user="" stacktrace="" service="" serviceType="IS" clientNode="" pid="712" threadName="DIRECTOR" context="">
</logEvent>
<logEvent xsi:type="logservice:LogEvent"  severity="3" messageCode="VAR_27028" message="Use override value" user="" stacktrace="" service="" serviceType="IS" clientNode="" pid="712" threadName="DIRECTOR" context="" timestamp="13-Mar-2014 18:00:11">
</logEvent>

Thanks bartus11 and Akshay Hegde.. both solutions worked :slight_smile: