入力XMLファイル内の特定の値を置き換えるために、フリップフロップ演算子を使用しています。次のようにフリップフロップ演算子の出力を処理する
ファイル構造は次のとおりです。
<a>BLE</a>
<-- hur dur -->
<b>12345</b>
<-- hur der -->
<c>VER1.2.3</c>
<-- hur dest -->
<d>VER1.2.3</d>
<a>CLE</a>
<-- hur dur -->
<b>12345</b>
<-- hur der -->
<c>VERX'.Y'.Z'</c>
<-- hur dest -->
<d>VERX'.Y'.Z'</d>
<a>DLE</a>
<-- hur dur -->
<b>12345</b>
<-- hur der -->
<c>VERX".Y".Z"</c>
<-- hur dest -->
<d>VERX".Y".Z"</d>
etc ...
は、だから私は、任意の特定の変数のバージョンフィールド(DおよびC)を変更したいと言うことができます。簡潔にするために、それをBLEにしましょう。私は最初にBLEの値(行1〜7)でブロックを見つけてから、フィールドを新しい値に置き換えなければなりません。
私のような、さまざまなものをしようとしてきた:$の版は、設定された変数(版= "VERX.Y.Z")です
perl -pi.bak -ne 'if (/BLE/ .. /<\/d/){ s/VER[[:digit:]]\+\.[[:digit:]]\+\.[A-Z][[:digit:]]\+[A-Z]\?/$ver/}' dur.xml
または
perl -ne "print if (/BLE/ .. /<\/d>/) " dur.xml | sed "/VER[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+[A-Z]\?/$ver/"
。しかし、最初のものは入力ファイルに対して何もしません(私はインプレースでそれをやりたい)。二つ目は、私が欲しいものを多かれ少なかれ生成するが、出力はBLEブロックに制限されている:
<a>BLE</a>
<-- hur dur -->
<b>12345</b>
<-- hur der -->
<c>VERX.Y.Z</c>
<-- hur dest -->
<d>VERX.Y.Z</d>
それはBLE以外の他のすべてをドロップするので、この出力は簡単>を持つファイルにリダイレクトすることができないこと。
上記と同様の方法で元のファイルを変更できる方法はありますか?
おかげでたくさん、 酒飲み
その入力は実際のXMLであるはずですか?それはそれのようには見えません。 _exact_ファイルを含めてください。 – simbabque
...また、ここではあなたのサンプルデータに 'buildversion'という文字列はありません... – jm666
@simbabqueそれは実際にはXMLではありません - 私が編集しているファイルは拡張子が.xmlですが、構造はちょっとです類似。また、オリジナルはちょうどこのように見えます。タグa、b、c、dだけが異なる名前を持っています – drinker