Как изменить конкретное значение атрибута XML с помощью скриптов на Mac - PullRequest
3 голосов
/ 15 декабря 2011

Мне было поручено написать скрипт для изменения определенного значения в XML-файле на 1000 Mac. Ясно, что это должно быть написано в сценарии, и, желательно, только с использованием инструментов, которые уже доступны на Mac (т.е. не требуется никаких дополнительных установок). Конечной целью здесь является отключение IPv6 в определенном файле, связанном с активным каталогом. Например:

Старый файл:

<IPv4>
    <script>Automatic</script>
</IPv4>

<IPv6>
    <script>Automatic</script>
</IPv6>

Новый файл:

<IPv4>
    <script>Automatic</script>
</IPv4>

<IPv6>
    <script>__INACTIVE__</script>
</IPv6>

Я попробовал поискать и у меня есть несколько сценариев sed, которые позволяют мне пройти половину пути, но не настолько близко. Я не могу установить программы синтаксического анализа XML, так как это должно быть максимально автоматизировано на всех компьютерах Mac.

Редактировать: дополнительный вопрос-

используя awk или sed, могу ли я посчитать, сколько раз он внес изменение, то есть подсчитать количество найденных экземпляров?

1 Ответ

3 голосов
/ 15 декабря 2011

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

awk '/<IPv6>/,/<\/IPv6>/ {sub(/Automatic/,"__INACTIVE__")}1' xml_file > new_xml_file

Использование sed: встроенное редактирование

sed -i '/<IPv6>/,/<\/IPv6>/s/Automatic/__INACTIVE__/' xml_file

Чтобы добавить количество в смесь:

awk '
/<IPv6>/,/<\/IPv6>/ {sub(/Automatic/,"__INACTIVE__"); if ($0~/__/) count++}1 
END{ print FILENAME, count >>"countfile"}' xml_file> new_xml_file

Оператор END захватит Filename, на котором вы запустили скрипт, и counts изменений в файле с именем countfile и сохранит appending для вашего статистического анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...