我期待創建一個基於簡單測試條件的快速shell腳本(HP-UX系統)來刪除XML標記。由於種種原因,我無法使用XML感知工具,如'xmlstarlet',因爲這些工具在我的生產系統上不可用。我意識到這些是正確的路,但我在這件事上沒有選擇。在元素開始/結束標記中查找特定測試條件後刪除特定的XML元素
考慮下面兩個關於兩個設備的XML元素。當設備不通電時,不會有StationId,也不會有HardwareInv,標籤與<..../>
不同。當設備處於通信狀態時,StationId存在且HardwareInv內容可用,則開始/結束標記完成,即結束時爲</....>
。
我想找到並通過搜索<StationId/>
和/或<HardwareInv/>
,如果找到,完全刪除相關DeviceA標籤,包括DeviceA之間的所有內容標籤本身不留空白行的後面取出裝置外的通訊科。
我已經嘗試了幾個不同的結果,特別是使用'sed',但沒有100%成功。非常感謝您的幫助。
這是輸入XML文件:
<DeviceA>
<PhysicalAdd>10.10.10.69</PhysicalAdd>
<NEId>0000-Test-06</NEId>
<StationId/>
*** MORE CONTENT REMOVED ***
<HardwareInv/>
</DeviceA>
<DeviceA>
<PhysicalAdd>10.10.10.109</PhysicalAdd>
<NEId>0000-Test-13</NEId>
<StationId>Bravo-01</StationId>
*** MORE CONTENT REMOVED ***
<HardwareInv>
<Unit>
<UnitId>1</UnitId>
<SerialNumber>1389A</SerialNumber>
</Unit>
</HardwareInv>
</DeviceA>
預期的輸出:
<DeviceA>
<PhysicalAdd>10.10.10.109</PhysicalAdd>
<NEId>0000-Test-13</NEId>
<StationId>Bravo-01</StationId>
*** MORE CONTENT REMOVED ***
<HardwareInv>
<Unit>
<UnitId>1</UnitId>
<SerialNumber>1389A</SerialNumber>
</Unit>
</HardwareInv>
</DeviceA>
@EdMorton ,感謝您的輸入,將更新帖子。它是一個大文件的一部分,並將用作輸入。預期的輸出在解釋中解釋,但會以任何方式更新。 – Monty
@EdMorton,不幸的是沒有GNU awk可用。 – Monty