如何在2个已知字符串之间提取值

时间:2016-07-29 14:41:03

标签: regex xml search sed extract

我有一些包含混合二进制和xml数据的大文件。我想提取文件中多次出现的2个XML标记之间的所有值。模式如下:<C99><F1>050</F1><F2>random value</F2></C99>。部分XML数据未格式化,所有内容都在一行中。

我需要来自<F1>的{​​{1}}和</F1>之间的所有值,其中值介于050和999之间(其他字段下也存在<C99>但我只需要值来自C99的F1)。我需要计算它们,看看有多少C99的F1值在050到999之间。

我想要一个提示,我可以轻松地获取和提取这些值(使用cat和grep?或sed?)。一旦将值导出到文件中,就很容易进行排序和计数。

我的临时解决方案:

从文件中删除所有二进制数据后,我可以运行以下命令:

<F1>

这将从cat filename | grep -o "<C99><F1>......." > file.txt

开头的所有字符串中导出前12个字符
<C99><F1>.

.....

在文本文件中导出后,我将<C99><F1>001 <C99><F1>056 <C99><F1>123 <C99><F1>445 替换为空,然后对剩余值进行排序和计数。

谢谢!

1 个答案:

答案 0 :(得分:2)

使用XMLStarlet

$ xml sel -t -v '//C99/F1[. >= 50 and . <= 999]' -nl data.xml | wc -l

那里没有太多暗示,抱歉。

相关问题