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를 추가했지만 원하는 문자열로 바꿀 수 있습니다.