Bash script для редактирования xml файла

Я хочу отредактировать файл конфигурации программы, которая представляет собой XML:

<software>
   <settings>
       ...
       <setting name="local directory" type="string">/home/username/</setting>
       ...
   </settings>
</software>

Каков самый простой способ сделать это из bash script?

Спасибо

Ответ 1

В зависимости от того, что вы хотите сделать, вы можете использовать некоторые инструменты, специфичные для XML (для обработки кодировок символов, поддержания корректности XML и т.д.). Вы можете использовать обычные инструменты, ориентированные на линию, но если вы не будете осторожны (или делаете что-то тривиальное), вы можете легко создать несоответствующий XML.

Я использую набор команд XMLStarlet. Это набор утилит командной строки для специфического синтаксического разбора/управления XML.

Ответ 2

Использование xmlstarlet:

xmlstarlet val -e file.xml
xmlstarlet ed -u "//settings/setting/@name" -v 'local directory2' file.xml
xmlstarlet ed -u "//settings[1]/setting/@name" -v 'local directory2' file.xml

# edit file inplace
xmlstarlet ed -L -u "//settings/setting/@name" -v 'local directory2' file.xml  

Ответ 3

Большинство людей, вероятно, будут использовать sed для редактирования строки из bash script. если ты на самом деле заботиться о разборе XML, а затем использовать что-то вроде Perl, у которого есть готовый XML-парсер.

Ответ 4

Уродливое/небезопасное, но иногда самое простое - вызвать sed/perl/awk из bash