Bash скрипт для обновления части значения элемента XML
Мне нужен скрипт bash для обновления части значения элемента XML в соответствии с некоторым другим динамическим свойством.
Например, файл XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Configure class="org.eclipse.something">
<Set name="foo">foo-val</Set>
<Set name="bar">bar-val</Set>
<Set name="my-elm">/dont/matter/THIS_ONE_NEED_TO_BE_UPDATED</Set>
</Configure>
Пытался использовать xmlstarlet с регулярным выражением, но он не дает желаемого результата. Я работаю над OSX 10.12.
1 ответ
Решение
С помощью xmlstarlet
с ниже xpath
выражение работало хорошо для меня. Приведенное ниже выражение выполняет замену в темпе (-L
флаг) из XML
файл
xmlstarlet edit -L -u "/Configure/Set[@name='my-elm']" -v '/dont/matter/THIS_ONE_NEED_TO_BE_UPDATED' xml-file
Брось -L
флаг, чтобы проверить, происходит ли замена правильно, и после успешного добавления добавить то же самое.
Проверено на xmlstarlet (1.6.1)
на OS X
Хотя это строго NOT
рекомендуется использовать sed
за xml
обновления, эта логика ниже будет работать для вас,
sed "s/\(<Set name=\"my-elm\".*>\)[^<>]*\(<\/Set.*\)/\1\/dont\/matter\/THIS_ONE_NEED_TO_BE_UPDATED\2/" xml-file
добавить -i.bak
для замены файла на месте.