在下面的XML中,我需要在<LastUpdated>
标签中找到时间戳,单个数字为0毫秒,并将它们更新为000.为此尝试Sed但不断出错。
<Order>
<OrderNbr>136642</OrderNbr>
<CustomerName>MIKE</CustomerName>
<CustomerType>NEW</CustomerType>
<DateOfBirth>09/03/1986</DateOfBirth>
<LastUpdated>2012-03-28 00:01:02.0</LastUpdated>
</Order>
<Order>
<OrderNbr>145645</OrderNbr>
<CustomerName>STEVE</CustomerName>
<CustomerType>NEW</CustomerType>
<DateOfBirth>05/08/1986</DateOfBirth>
<LastUpdated>2014-03-28 10:09:04.456</LastUpdated>
</Order>
<OrderNbr>128965</OrderNbr>
<CustomerName>MARK</CustomerName>
<CustomerType>NEW</CustomerType>
<DateOfBirth>04/09/1989</DateOfBirth>
<LastUpdated>2016-04-28 12:19:06.0</LastUpdated>
</Order>
预期输出:
<Order>
<OrderNbr>136642</OrderNbr>
<CustomerName>MIKE</CustomerName>
<CustomerType>NEW</CustomerType>
<DateOfBirth>09/03/1986</DateOfBirth>
<LastUpdated>2012-03-28 00:01:02.000</LastUpdated>
</Order>
<Order>
<OrderNbr>145645</OrderNbr>
<CustomerName>STEVE</CustomerName>
<CustomerType>NEW</CustomerType>
<DateOfBirth>05/08/1986</DateOfBirth>
<LastUpdated>2014-03-28 10:09:04.456</LastUpdated>
</Order>
<OrderNbr>128965</OrderNbr>
<CustomerName>MARK</CustomerName>
<CustomerType>NEW</CustomerType>
<DateOfBirth>04/09/1989</DateOfBirth>
<LastUpdated>2016-04-28 12:19:06.000</LastUpdated>
</Order>
答案 0 :(得分:0)
你可能会得到&#34;错误&#34;因为你的表达中有/
。但是sed接受任何字符作为分隔符,只需在#
之后指定它:
sed -i "s#\.0</LastUpdated>#.000</LastUpdated>#" yourxml.xml
将执行您想要的操作(感谢-i
选项替换文件中的字符串。请注意,如果您使用的是sed
的旧版本,则必须重定向到另一个文件&amp;把它移回原来的那个)
答案 1 :(得分:0)
与awk
$ awk '/LastUpdated/{sub(/\.0</,".000")}1' file > temp && mv temp file
答案 2 :(得分:0)
试试这个:
命令:
bash > echo '<LastUpdated>2016-04-28 12:19:06.0</LastUpdated>' | sed 's/\.0<\/Last/.000<\/Last/g'
输出:
<LastUpdated>2016-04-28 12:19:06.000</LastUpdated>
更新:这仅对“时间”有效,“时间”具有单个零位数(以毫秒为单位)。它不适用于不是单个数字零毫秒值的值。