XMLファイルからデータを抽出する方法

XMLファイルからデータを抽出する方法

既存の PRTG 設定を Nagios 設定に移行しようとしています。問題は、現在 20,000 台を超えるモニターがあるため、センサー情報を .dat ファイルから読み取り可能なファイルにエクスポートして、他のいくつかの Nagios ファイルに移動できるようにしようとしていることです。問題は、スクリプトの作成にまだ慣れていないため、bash が強制終了しないようにファイルを分割できるスクリプトを作成する以外は、すべての試みが失敗していることです。他の人が作成したスクリプトを使用しようとしましたが、必要な用途には機能しないと思います。

私は以下の情報を抽出する必要があります。host***/hostとname***/nameの間のすべて

少なくとも、テキストの範囲を抽出できるような書き方を教えてもらえれば、それもうまくいくでしょう。 :)

例:

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

私が使用しているこの設定ファイルは、サイズがほぼ 1 GB の .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パーサーを使用するXMLスターレット:

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

<host>これにより、XML ドキュメント内の任意の場所にある任意のノードまたは<name>ノードのコンテンツが抽出されますfile.xml

XMLStarlet は、通常のパッケージ マネージャーから入手できる可能性があります。実行可能ファイルは、xmlstarlet単に ではなく と呼ばれることもありますxml

関連情報