0

Linux Bash スクリプトで抽出する必要があるデータを含む XML ファイルがあります。たとえば、括弧内のすべてが必要であり、それに応じてターミナルで出力する必要があります (最初の説明の隣に名前)。

これを行う最善の方法は何ですか?XPath を使用して C# で実行できましたが、単純に Linux Bash スクリプトを使用してそれを行うことはできませんか? ほとんどの場合、awk、sed、grep、cut ect を使用して実行できることはわかっていますが、適切に実行しているとは思いません (実際、そうではないことはわかっています)。説明データをファイルに抽出し、名前をファイルに抽出したところですが、数時間後、これが最善/適切な方法ではないことに気付きました。

読み方の例です。

  • 名前1 - 説明1
  • 名前2 - 説明2
  • name3 - (空白)
  • 名前4 - 説明3

ありがとうございました!

より明確にするために詳細を追加できる場合は、お知らせください。(長い一日の仕事で脳が少し揚げられている)

サンプル XML (1 つのインスタンスに簡略化)

<zabbix_export>
<templates>
    <template>
        <items>
            <item>
                <name>Available memory</name>
                <description>Available memory is defined as free+cached+buffers memory.</description>                  
            </item>
        </items>
    </template>
<templates> 

読み方:

<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Another Name</name> - <description>Another Description</description>
<name>Another Name</name> - <description>Another Description</description>
<name>Another Name</name> - <description>Another Description</description>
4

3 に答える 3

3

指図

xmlstarlet sel -t -m '//item/*' -c . -n input.xml |
    sed '2~2s/$/\n/' |
        awk -F'\n' -vRS='' '{print $1" - "$2}'

出力

<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
于 2012-06-25T22:00:52.087 に答える
2

xpathコマンドは bash から起動できます。Perl XML と共にインストールされ、標準出力への XPath クエリを非常に快適に実行できます。

于 2012-06-25T21:49:17.697 に答える
0

実行可能ファイルがインストールされていない場合は、次のxpathようにインストールできます。

cpan XML::XPath

必要なPerlモジュールをダウンロードし、xpathバイナリをインストールする必要があります。

于 2012-06-25T23:17:41.930 に答える