我需要爲包含在XML文件中的數據grep。我需要獲取多個元素,最後一個元素位於節點內。我正在琢磨的元素之間有一堆數據。我可以很容易地用grep的多個元素,像這樣:如何grep多個字符串與-A
grep -E "<first|<second|<third|<seventh" file.xml
但因爲我有一個文件結構,看起來像這樣:
<first>First</first>
<second>Second</second>
<third>Third</third>
<fourth>Fourth</fourth>
<fifth>Fifth</fifth>
<sixth flexible="true">
<low>0.09</low>
<high>5.90</high>
</sixth>
<seventh flexible="false">
<low>1.82</low>
<high>3.14</high>
</seventh>
我沒有得到<seventh>
節點內的數字數據(沒有想到用那個命令)。所以我想用grep -An
(後)開關,其中「n」是行最初的比賽後,比賽的數量,以獲得第七節點的其餘部分:
grep -E "<first" -E "<second" -E "<third" -E -A3 "<seventh" file.xml
這將返回:
<first>First</first>
<second>Second</second>
<third>Third</third>
<seventh flexible="false">
<low>1.82</low>
<high>3.14</high>
</seventh>
,我可以再按摩,讓我的最終結果(實際上只有連同它相關的第一,第二,第三&字符串從第七節點所需要的「高」的數據)。但是,這不起作用,我會在<first
之後立即得到前三個元素,並忽略命令的其餘部分。
我也試過:
grep -E "<first|<second|<third" -E -A3 "<seventh" file.xml
這給了我幾分相似的結果,但完全忽略了命令的「-E -A3 "<seventh
」的一部分。那麼,我猜不要忽略,因爲-A3仍然被應用於命令的前面部分。我知道你可以使用後置命令交換機,但是你能控制它們走多遠嗎?
我閱讀了關於grep的手冊頁,並沒有看到如何將命令鏈接在一起。如果這很重要,我正在使用Mac,但如果需要的話,可以輕鬆訪問Linux操作系統&。
如何獲取我想要的數據?
感謝您的幫助,但是您的解決方案無法爲我提供我正在查找的數據。您和邁克爾對xpath的建議看起來是解決問題的好方法。實際上,我做了一個蠻力的grep&sed腳本來讓數據進入可管理的狀態。像這樣: 'grep -E -A3「<第一|第二|第三|第七」file.xml | sed -e's/ //'-e's/ //'-e's/ //'-e's/^ [ \ t] * //'-e'/^.*$/ s''因爲我在每個搜索詞後面都有3行,所以我得到了太多的數據並使用sed來清理它。這很好,所以我可以繼續前進。 –
delliottg
2012-07-13 16:46:28