Awk
當輸入參數位於塊的中間時,如何在獲取 xml 塊時實現 awk 範圍模式
我正在嘗試獲取這樣的 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
當輸入參數是詳細資訊隊列(@塊的中間)時,我將如何獲取相同的 xml 塊?
這是對這個問題的一種看法
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
為您正在尋找的實際模式 - 例如,在您的範例中- 將在開始和結束XML 標記<details queue="ABC.SAMPLE"
之間進行搜尋。<machine>