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を追加したが、必要な文字列に置き換えることができます。