сценарий bash для редактирования xml-файла

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

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

какой самый простой способ сделать это с bash-скрипт?

спасибо

4 ответов


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

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


С помощью 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  

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


уродливый / небезопасный, но иногда проще всего вызвать sed/perl / awk из bash