次のXML塊を取得しようとしています。
<machine name="sample1" min="1" max="10" idleTime="300" backend="ABC,XYZ">
<handler className="com.abc.xyz.qwerty.foo.FooBar" />
<details queue="ABC.SAMPLE" suggExpiry="30" minExpiry="4" maxExpiry="500"/>
</machine>
詳細キューは入力パラメーターとして使用されます。
マシン名(@ブロックで始まる)が私のパラメータのときに成功しました。
awk '/<machine.*name="sample1"/,/<\/machine>/' Target.xml
入力パラメータが詳細キュー(@block中間)の場合、同じxmlブロックをどのように取得できますか?
ベストアンサー1
この問題の1つの観点は次のとおりですawk
。
awk '
/<machine.*name=/ { f=1 ; m=0 ; res="" }
f { res = res $0 ORS }
f && /PATTERN/ { m=1 }
/<\/machine>/ { f=0 ; if (m) print res $0 }
' your_XML_file
FSAを実施しています。フラグは、f
必要な XML ブロックに存在するかm
どうかを制御し、フラグは、エントリがそのブロックで見つかったかどうかを示し、res
ブロックを記憶するために使用され、条件が一致した場合、ブロックの最後に印刷されます。
探している実際のパターンを置き換える必要がありますPATTERN
。たとえば、オープン<details queue="ABC.SAMPLE"
XMLタグと閉じるXMLタグの間で検索されます。<machine>