Text-Processing
從輸入文件中讀取數據並將數據放在 xml 中的適當欄位中
我有一個輸入文件和一個 xml 文件。
輸入文件-
/user/sht 227_89,45_99 /user/sht1 230_90 /user/sht2 441_50
該文件具有包含路徑和位置的交替行。
xml文件——
<aaa><command name="move"> <domain> <path></path> <positions></positions> </domain> <domain> <path></path> <positions></positions> </domain> <domain> <path></path> <positions></positions> </domain> </command> </aaa>
我需要編寫一個腳本來提供以下所需的輸出 xml,然後使用以下 xml 作為輸入執行一些命令-
<aaa><command name="move"> <domain> <path>/user/sht</path> <positions>227_89,45_99</positions> </domain> <domain> <path>/user/sht1</path> <positions>230_90</positions> </domain> <domain> <path>/user/sht2</path> <positions>441_50</positions> </domain> </command> </aaa>
我嘗試從輸入文件中逐行提取並將其放在 xml 中,但問題是每次出現的
<path>
都被第一個輸入行替換。使用 GNU bash 4.1.2。
使用單個 GNU
sed
腳本,您可以執行類似的操作sed -n '/<aaa>/,/<.aaa>/!{H;d} G;:a s_>\(</path>.*\n\)\n\([^\n]*\)_>\2\1_ s_>\(</positions>.*\n\)\n\([^\n]*\)_>\2\1_; ta;P;s/.*\n\n/\n/;h' input.txt input.xml
第一行收集了保持緩衝區中第一個文件的所有行。
然後對於第二個文件的每一行,保留緩衝區都附加有
G
. 如果它是一個path
或positions
保持緩衝區的第一段,則使用兩個s
命令之一將其移動到標籤內。在任何情況下,該行都會被列印 (
P
) 並被移除 (s/.*\n\n/\n/
),並且替換列表的剩餘部分會被移回保留緩衝區以供下一個循環 (h
) 使用。