我需要为包含在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