Este es mi XML.
<configGroup>
<type>SERVER_CONFIG</type>
<configProperty id="Server48">
<configProperty>
<name>Server Name</name>
<value>oaea_server1</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_ONLY</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Address</name>
<value>server.com</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Port</name>
<value>6851</value>
<itemMetadata>
<dataType>INTEGER</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
</configProperty>
<configProperty id="Server6">
<configProperty>
<name>Server Name</name>
<value>oacore_server2</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_ONLY</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Address</name>
<value>server.com</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Port</name>
<value>7251</value>
<itemMetadata>
<dataType>INTEGER</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
</configProperty>
</configGroup>
XML contiene muchos otros tipos de servidores y mi requisito es eliminar todos los servidores que coincidan con oaea_server.
La salida debe buscarse a continuación y eliminarse del nuevo XML
<configProperty id="Server48">
<configProperty>
<name>Server Name</name>
<value>oaea_server1</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_ONLY</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Address</name>
<value>server.com</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Port</name>
<value>6851</value>
<itemMetadata>
<dataType>INTEGER</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
</configProperty>
Intenté usar grep y también funciona, pero luego codifiqué las líneas antes y después.
grep -B 3 -n -A 22 oaea_servidor
Pero sé que esta no es la forma correcta, ya que podría haber cambios en el xml en cualquier momento y el script automatizado fallará.
Gracias
Respuesta1
Usar xmlstarletesto debería funcionar con el formato correcto.xml
xmlstarlet ed -d "//configProperty[.//value[contains(string(), 'oaea_server')]]" file1
La salida tiene Server48 eliminado
<?xml version="1.0"?>
<configGroup>
<type>SERVER_CONFIG</type>
<configProperty id="Server6">
<configProperty>
<name>Server Name</name>
<value>oacore_server2</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_ONLY</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Address</name>
<value>server.com</value>
<itemMetadata>
<dataType>STRING</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
<configProperty>
<name>Listen Port</name>
<value>7251</value>
<itemMetadata>
<dataType>INTEGER</dataType>
<scope>READ_WRITE</scope>
</itemMetadata>
</configProperty>
</configProperty>
</configGroup>


