我有一个文件main.xml
</placement>
<theme>
<name>chrome</name>
<titleLayout>CLM</titleLayout>
<keepBorder>no</keepBorder>
<font place="ActiveWindow">
<name>scientifica</name>
</font>
</theme>
<desktops>
和第二个文件theme.xml
<name>obdark</name>
<titleLayout>LIMC</titleLayout>
<keepBorder>no</keepBorder>
<font place="ActiveWindow">
<name>Noto Sans</name>
</font>
我想用<theme></theme>
的内容替换main.xml
中theme.xml
之间的文本,我该怎么办?
假设您的XML将像下面的[[格式正确],则可以使用此简单的xmlstarlet命令:
xmlstarlet ed -u "/desktops/theme" -v "$(cat theme.xml)" a.xml | xmlstarlet unesc | xmlstarlet fo
XML输入:<desktops>
<theme>
<name>chrome</name>
<titleLayout>CLM</titleLayout>
<keepBorder>no</keepBorder>
<font place="ActiveWindow">
<name>scientifica</name>
</font>
</theme>
</desktops>
XML输出(在xmlstarlet命令应用后:]<?xml version="1.0"?>
<desktops>
<theme>
<name>obdark</name>
<titleLayout>LIMC</titleLayout>
<keepBorder>no</keepBorder>
<font place="ActiveWindow">
<name>Noto Sans</name>
</font>
</theme>
</desktops>
此方法的局限性在于您不能在XML中使用XML实体,因为它们会由unesc
命令进行转换。