【发布时间】:2015-05-29 17:45:34
【问题描述】:
我有一个文件 Afile:
<start>
<memory>
<hdd>10</hdd>
<hdc>40</hdc>
</memory>
<storage>
<disk>
<disk1>firstname</disk1>
</disk>
<disk>
<disk1>secondname</disk1>
</disk>
<map>
<code>1</code>
</map>
<map>
<code>2</code>
</map>
</storage>
</start>
我有第二个文件 Bfile:
<disk>
<disk1>thirdname</disk1>
</disk>
如何使用 sed 将 Bfile 的内容插入 Afile。所以最后我需要有以下文件:
<start>
<memory>
<hdd>10</hdd>
<hdc>40</hdc>
</memory>
<storage>
<disk>
<disk1>firstname</disk1>
</disk>
<disk>
<disk1>secondname</disk1>
</disk>
<disk>
<disk1>thirdname</disk1>
</disk>
<map>
<code>1</code>
</map>
<map>
<code>2</code>
</map>
</storage>
</start>
所以它应该插入到最后一个模式之后。当我使用以下命令时,我得到以下结果:
sed -e '/disk>/rBfile' 文件
<start>
<memory>
<hdd>10</hdd>
<hdc>40</hdc>
</memory>
<storage>
<disk>
<disk1>firstname</disk1>
</disk>
<disk>
<disk1>thirdname</disk1>
</disk>
<disk>
<disk1>secondname</disk1>
</disk>
<disk>
<disk1>thirdname</disk1>
</disk>
<map>
<code>1</code>
</map>
<map>
<code>2</code>
</map>
</storage>
</start>
所以它把Bfile的内容放在每次出现“disk>”之后。我只需要最后一次出现。如何更改命令?
【问题讨论】:
-
我会使用Using sed to insert file content 使用
/<\/storage>/作为模式。 -
如何在第二次出现模式后添加?所以在我的情况下,模式是
/<\/disk>/ -
如果您的意思是该文件可能已经包含
<disk1>fourthname</disk1>,那么您应该更新您的问题。虽然在sed中可能是可能的,但在awk中会容易得多。如果您可以接受awk解决方案,还可以添加awk标记。祝你好运。 -
awk 也很好,所以我有 Afile 和 Bfile,需要结果
<start> <memory> <hdd>10</hdd> <hdc>40</hdc> </memory> <storage> <disk> <disk1>firstname</disk1> </disk> <disk> <disk1>secondname</disk1> </disk> <disk> <disk1>thirdname</disk1> </disk> </storage> </start> -
你确定你真的需要插入“秒后”吗?正如@fedorqui 所说,在 之前插入标签似乎更好。