【发布时间】:2022-10-24 05:00:11
【问题描述】:
我有一个 xml 文件,我想在其中执行 sed 命令来删除一些字符串,
我这里有一部分文件:
<?xml version="1.0" ?>
<DataPDU
xmlns:ns2="urn:swift:saa:xsd:saa.2.0">
<DbtrAcct>
<Id>
<Othr>
<Id>1234567890</Id>
</Othr>
</Id>
</DbtrAcct>
<CdtrAcct>
<Id>
<Othr>
<Id>1000002233250</Id>
</Othr>
</Id>
</CdtrAcct>
<Dt>
<Dt>2022-10-05</Dt>
</Dt>
</DataPDU>
我需要从这个文件中删除标签<Id> 和<Dt>,但只有当它们内部有相同的标签时,当这种情况发生时,我需要删除其中一个标签。得到一个看起来像这样的文件:
<?xml version="1.0" ?>
<DataPDU
xmlns:ns2="urn:swift:saa:xsd:saa.2.0">
<DbtrAcct>
<Othr>
<Id>1234567890</Id>
</Othr>
</DbtrAcct>
<CdtrAcct>
<Othr>
<Id>1000002233250</Id>
</Othr>
</CdtrAcct>
<Dt>2022-10-05</Dt>
</DataPDU>
(这里并排,以便更好地阅读:)
为此,我尝试使用如下命令(我现在只关注<Id>)
sed -i "s/<DbtrAcct>[^<>]*<Id>/<Id>/g" file.xml
我试图用这个替换由<DbtrAcct> + <Id> 形成的字符串,然后用<Id> 替换它,但我在寻找这些时遇到了问题,因为它们不在同一行(至于我知道sed 当时只读取一行)。
我该怎么做才能实现我在这里需要的东西,我对这种类型的操作不太了解,但我认为这可能满足我的需要。
(我的第二部分是当我替换文件的结束标签时如何转义结束标签中的“/”)
我也对其他选项持开放态度,例如 awk 即使有回声,如果值得的话,
我一直在尝试使整个文件成为一行,然后删除,然后将其设置为 xml 格式,但没有运气
【问题讨论】:
标签: sed