我需要对 XML 文件中包含的数据进行 grep。我需要获取多个元素,最后一个在节点内。我正在研究的元素之间有一堆数据。我可以轻松地 grep 像这样的多个元素:
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 和 Windows 机器。
我怎样才能得到我想要的数据?