我想使用 sed 替换 xml 文件中的命名空间(我已经放弃尝试从需要的 ant 进行此操作)。主要问题是存在重复的元素列表 - 并非所有元素都需要替换。
xml文件:
<xml-fragment>
<imp:exportedItemInfo instanceId="WikiDS_v1_PS" typeId="ProxyService" xmlns:imp="http://www.bea.com/wli/config/importexport">
<imp:properties>
<imp:property name="dataclass" value="com.bea.wli.sb.resources.config.impl.XmlEntryDocumentImpl"/>
<imp:property name="isencrypted" value="false"/>
</imp:properties>
</imp:exportedItemInfo>
<imp:exportedItemInfo instanceId="NonShared/wikitest/FileUploadManagementDS_v1_BS_WSDL" typeId="WSDL" xmlns:imp="http://www.bea.com/wli/config/importexport">
<imp:properties>
<imp:property name="dataclass" value="com.bea.wli.sb.resources.config.impl.WsdlEntryDocumentImpl"/>
<imp:property name="isencrypted" value="false"/>
</imp:properties>
</imp:exportedItemInfo>
<imp:exportedItemInfo instanceId="NonShared/wikitest/WikiTestDS_v1_BS" typeId="BusinessService" xmlns:imp="http://www.bea.com/wli/config/importexport">
<imp:properties>
<imp:property name="dataclass" value="com.bea.wli.sb.resources.config.impl.XmlEntryDocumentImpl"/>
<imp:property name="isencrypted" value="false"/>
</imp:properties>
</imp:exportedItemInfo>
</xml-fragment>
因此,在本例中,我想替换具有 ProxyService typeId 的块中的命名空间,但不替换其他命名空间。
答案1
您可以使用sed
仅替换与特定模式匹配的行。
sed -e '/typeId="ProxyService"/s/xmlns:imp="http:\/\/www.bea.com\/wli\/config\/importexport"/xmlns:imp="http:\/\/www.bea.com\/wli\/config\/importexport2"/' new.xml
这将仅在与 "typeId="ProxyService" 匹配的行中替换您的命名空间。我刚刚向您的命名空间添加了 2,但您可以将其替换为您选择的任何字符串。