Text-Processing

刪除所有 <FOLDER> 節點!= 標記值

  • May 2, 2021

我知道 xml 解析器是去這裡的理想方式,但沒有一個可用或能夠添加到我的環境中。

讓我們採用遵循以下結構的 XML:

&lt;CONTAINER&gt;
 &lt;FOLDER NAME="I_RS_INT"&gt;
 &lt;/FOLDER&gt;
 &lt;FOLDER NAME="I_R_INR"&gt;
 &lt;/FOLDER&gt;
 &lt;FOLDER NAME="I_RS_TRN"&gt;
 &lt;/FOLDER&gt;
&lt;/CONTAINER&gt;

在 bash 腳本中,我希望刪除&lt;FOLDER NAME=匹配的*RS*所有節點或刪除所有節點&lt;FOLDER NAME != $var_folder

非常感謝任何幫助!

這應該這樣做:

cat /tmp/xml  | sed -e '/&lt;FOLDER NAME=.*RS.*&gt;/ { N; d; }'

對於與兩個/字元之間的模式匹配的每一行,都會執行 {} 中的程式碼。N 也將下一行帶入模式空間,然後 d 在繼續下一行之前刪除整個內容。這適用於任何與 POSIX 兼容的sed.

嘗試以下方法刪除和之間的每一&lt;FOLDER NAME=.*RS.*&gt;&lt;/FOLDER.&gt;

awk '/&lt;FOLDER NAME=.*RS.*&gt;/,/&lt;\/FOLDER&gt;/ {next} {print}' xmlfile

next命令停止目前匹配的處理。用一個簡單的print.

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