我想用来sed
替换 .xml 上的 XML 标记bash
。
这是用于测试的示例 xml 内容:
<xml-content>
<validation>
<timeout>2880</timeout>
<subject>example</subject>
<required>true</required>
</validation>
</xml-content>
我想更换标签validation
:
<validation>
<timeout>2880</timeout>
<subject>example</subject>
<required>true</required>
</validation>
使用新标签other-tag
:
<other-tag>
<hello/>
<more>false</more>
</other-tag>
这是最终的预期结果:
<xml-content>
<other-tag>
<hello/>
<more>false</more>
</other-tag>
</xml-content>
如何使用单个命令行来完成sed
?
sed
您可以选择文件中两个模式之间的所有行(包括包含PAT1
andPAT2
的两行)并像这样替换它们:REPLACEMENT
是文本,每个嵌入的换行符前面都有一个反斜杠。请注意,如果
PAT1
或PAT2
包含前言斜杠/
,那么它们中的每一个都必须用反斜杠转义,\/
或者分隔符必须更改为除此之外的其他/
内容,在这种情况下,您需要在c \
命令或任何其他sed
命令时转义每个分隔符序列的第一个例如,您可以将定界符更改为_
这样:所以你可以这样做:
编辑这个:
对此:
请注意,如果您想就地编辑原始文件,则需要
sed
s 选项...首先在没有它的情况下进行测试,然后将其与备份后缀一起使用,例如保存原始文件的备份副本,扩展名为 ie ,如下所示:-i
-i.back
.back
file.back
还要注意,有一些专门用于编辑 XML 文件的工具,您可以使用这些工具来更新、删除或插入 XML 元素……请参阅如何替换多个 XML 文件中的多个字段?举个例子......然而,这些工具可能需要比像你这样的一些用例所需的更复杂的命令脚本
sed
......我理解你为什么要求一个sed
解决方案并且我自己也更喜欢sed
专门的 XML 工具这样的任务......当然,加上sed
会更便携。