Для этого можно использовать анализатор XML. Напримерxmlstarlet
(XML-инструмент командной строки):
$ xmlstarlet ed -u '//client-version' -v '1.2.9' file.xml
1.2.9
Приведенная выше команда найдет все вхождения узла документа client-version
и изменит их значения на строку 1.2.9
.
Чтобы изменить только те, что 1.2.8
, вы должны использовать
xmlstarlet ed -u '//client-version[text() = "1.2.8"]' -v '1.2.9' file.xml
Перенаправьте вывод в новый файл, проверьте его и переименуйте в исходное имя файла или запустите xmlstarlet
с параметрами -L
или --inplace
, чтобы отредактировать файл в месте -.
Использование xq
, из yq
, из https://kislyuk.github.io/yq/, что позволяет использовать jq
выражения для изменения XML-документов:
xq -x '(..|."client-version"? // empty) |= "1.2.9"' file.xml
Это обновляет значение каждого узла client-version
на 1.2.9
независимо от того, где в документе он расположен.
Строка 1.2.9
может быть вставлена из такой переменной:
new_version=1.2.9
xq -x --arg ver "$new_version" '(..|."client-version"? // empty) |= $ver' file.xml