Мне нужно изменить значение элемента (DB_CONNECT_STRING) в XML-файле без создания нового файла с использованием Python или сценариев.
<?xml version = '1.0' encoding = 'UTF-8'?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <!-- Database server details --> <DB_CONNECT_STRING>(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=abc)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=cdb)))</DB_CONNECT_STRING> </properties>
------ <properties> -------- <DB_CONNECT_STRING>(new data)</DB_CONNECT_STRING> ------- </properties>
Я бы использовал xmlstarlet для простых правок XML:
xmlstarlet ed -u /properties/DB_CONNECT_STRING -v "new value" file.xml
Если вывод выглядит нормально, используйте xmlstarlet --inplace ... для сохранения обратно в файл.
xmlstarlet --inplace ...
sed -i - это то, что вы ищете.
sed -i
В вашем случае это должно быть
sed -i 's#<DB_CONNECT_STRING>.*</DB_CONNECT_STRING>#<DB_CONNECT_STRING>(new data)</DB_CONNECT_STRING>#' <here_is_your_file>