Как извлечь данные из XML-файла

Как извлечь данные из XML-файла

Я пытаюсь перенести нашу предыдущую настройку PRTG в настройку Nagios. Проблема в том, что у нас сейчас более 20 тыс. мониторов, поэтому я пытаюсь экспортировать информацию о датчиках из файла .dat в читаемый файл, который можно переместить в ряд других файлов nagios. Проблема в том, что я все еще новичок в написании скриптов, и, кроме создания скрипта, который может разделить файл, чтобы bash не убивал себя, все попытки потерпели неудачу. Я пытался использовать скрипт, написанный кем-то другим, но не думаю, что он подойдет для того, что мне нужно.

Мне нужно извлечь следующую информацию: Все между host***/host и name***/name

Если бы кто-нибудь хотя бы указал мне направление, в котором я мог бы разобраться, как написать что-то, что позволило бы мне извлечь диапазон текста, это тоже сработало бы. :)

Пример:

<host>
10.0.0.0
</host>
<name>
This is a Business
</name>

Имейте в виду, что используемый мной файл конфигурации — это файл .dat размером почти в гигабайт.

<?xml version="1.0" encoding="UTF-8"?>
<root version="15" oct="PRTG Network Monitor 17.2.31.1917 x64" 
saved="5/12/2017 4:36:26 PM" max="184692" guid="{3A6843F2-61BB-47EA-8EB2-
B2E62E24EF2F}" treeversion="0" created="2009-10-02-19-22-11" 
<statistics time="12-05-2017 16:09:19">

решение1

Используйте XML-парсер, напримерXMLStarlet:

$ xmlstarlet sel -t -v '//host' -v '//name' file.xml

Это позволит извлечь содержимое любого <host>узла <name>в любом месте file.xmlXML-документа.

XMLStarlet, скорее всего, доступен через ваш обычный менеджер пакетов. Исполняемый файл иногда называется xmlstarletне просто xml.

Связанный контент