Sed bug会导致最后一行从文件输出流中丢失?

时间:2014-01-14 14:25:39

标签: xml bash sed

所有

我有一个非常简单的Sed命令如下

sed s/XXXX/TestValue/  >> new.xml <template.xml 

我在发送之前使用Sed编辑模板XML文件。

输入文件&gt;&gt; TEMPLATE.XML

 <?xml version="1.0" encoding="UTF-8"?>
    <EventMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
        <host>testserver.intern.nat.com</host>
        <sourceSystem>EDW</sourceSystem>
        <EventEntity>
            <EventEntityID>XXXX</EventEntityID>
            <EventEntityType>Confirm Batch Receipt</EventEntityType>
        </EventEntity>
    </EventMessage>

然后在Sed处理完文件并替换“XXXX”值之后,名为new.xml的输出文件丢失了最后一个关闭元素标记

输出文件&gt;&gt; new.xml

<?xml version="1.0" encoding="UTF-8"?>
<EventMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
    <host>testserver.intern.nat.com</host>
    <sourceSystem>EDW</sourceSystem>
    <EventEntity>
        <EventEntityID>Batch_123.csv</EventEntityID>
        <EventEntityType>Confirm Batch Receipt</EventEntityType>
    </EventEntity>
---closing tag missing ---

就像Sed在XML文件中的最后一行之前关闭输出流一样。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以动态添加缺失的换行符,因为sed仅处理完整的行(即在其末尾添加换行符):

(cat input.txt; echo) | sed … > output.txt