gpt4 book ai didi

linux - 如何在模式前将一个文件的内容插入到另一个文件中

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:40 25 4
gpt4 key购买 nike

我有一个文件 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 将 B 文件的内容插入到 A 文件中。所以最后我需要有以下文件:

<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' Afile

<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>

因此它在每次出现“disk>”之后放置 Bfile 的内容。我只需要最后一次出现。如何更改命令?

最佳答案

XML(就像一般的结构化数据)不应该用像 awksed 这样的纯文本工具来处理,除非在非常特殊的情况下,因为没有人期望 XML 工具能够如果换行符更改位置或在良性位置插入/删除空格,则中断。

相反,我会使用 Python,它的标准库中有一个 XML 解析器:

#!/usr/bin/python

import xml.etree.ElementTree as ET;
import sys;

# file names taken from command line arguments.
target = ET.parse(sys.argv[1]);
insert = ET.parse(sys.argv[2]);

# Interesting part here:
target.getroot().find("./storage").append(insert.getroot())

# to write to a file, use target.write('output.xml')
ET.dump(target)

称之为

python foobar.py fileA fileB

关于linux - 如何在模式前将一个文件的内容插入到另一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30505622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com