在Linux文件中将多行附加到特定行的末尾

时间:2014-12-10 11:41:33

标签: linux shell sed

我有一段xml文档,我试图稍微操纵一下。到目前为止,我已经使用了" sed"找到并替换它的部分,它现在足够接近我需要的东西。到目前为止它看起来像这样

<?xml version=1.0 encoding=UTF-8?>
<AIFMReportingInfo
  CreationDateAndTime="2014-12-08T00:00:00"
  Version="1.2"
  ReportingMemberState="GB"

xsi:noNamespaceSchemaLocation=AIFMD_DATMAN_V1.2.xsd xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>

剩下要做的就是追加#34; CreationDateAndTime&#34;从第二行开始,输出应该看起来像这样

<?xml version=1.0 encoding=UTF-8?>
<AIFMReportingInfo CreationDateAndTime="2014-12-08T00:00:00" Version="1.2" ReportingMemberState="GB" xsi:noNamespaceSchemaLocation=AIFMD_DATMAN_V1.2.xsd xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance> 

包括我追加到第二行的每一行之间的空格。有没有办法使用sed这样做?任何建议都会非常感谢,提前谢谢。

2 个答案:

答案 0 :(得分:0)

看看这是否足够。

tr '\n' ' ' < File | sed -r 's/(encoding=UTF-8\?>)/&\n/g'

示例:

$ cat File
<?xml version=1.0 encoding=UTF-8?>
<AIFMReportingInfo
  CreationDateAndTime="2014-12-08T00:00:00"
  Version="1.2"
  ReportingMemberState="GB"

xsi:noNamespaceSchemaLocation=AIFMD_DATMAN_V1.2.xsd xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>

$ tr '\n' ' ' < File | sed -r 's/(encoding=UTF-8\?>)/&\n/g'
<?xml version=1.0 encoding=UTF-8?>
 <AIFMReportingInfo   CreationDateAndTime="2014-12-08T00:00:00"   Version="1.2"   ReportingMemberState="GB"  xsi:noNamespaceSchemaLocation=AIFMD_DATMAN_V1.2.xsd xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance> 

答案 1 :(得分:0)

你可以做到

~$ sed '1!{:a;N;$!ba s/\n//g}' myfile
<?xml version=1.0 encoding=UTF-8?>
<AIFMReportingInfo  CreationDateAndTime="2014-12-08T00:00:00"  Version="1.2"  ReportingMemberState="GB"xsi:noNamespaceSchemaLocation=AIFMD_DATMAN_V1.2.xsd xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>

除了第一行(1!)之外,将该行附加到模式空间(N),如果不是,则将文件末尾($!)追加到标签a ba。在文件末尾,将每个\n替换为空(s/\n//g)。