Awk

當輸入參數位於塊的中間時,如何在獲取 xml 塊時實現 awk 範圍模式

  • July 12, 2021

我正在嘗試獲取這樣的 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>

引用自:https://unix.stackexchange.com/questions/207142