【问题标题】:How to extract values between 2 known strings如何提取2个已知字符串之间的值
【发布时间】:2016-12-04 08:00:30
【问题描述】:

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

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

我想知道如何轻松获取和提取这些值(使用 cat 和 grep?或 sed?)。将值导出到文件中后,排序和计数就很容易了。

我的临时解决方案:

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

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

这将从&lt;C99&gt;&lt;F1&gt;.开头的所有字符串中导出前12个字符

<C99><F1>001
<C99><F1>056
<C99><F1>123
<C99><F1>445

.....

在文本文件中导出后,我将&lt;C99&gt;&lt;F1&gt; 替换为空,然后对剩余值进行排序和计数。

谢谢!

【问题讨论】:

  • 这可能会带来太多的反对票,除非您至少付出一些努力并尝试解决自己的问题
  • 它无法使用 XML Parse,因为我不需要它的一些二进制格式的数据。
  • 我不好意思发布我的解决方案,但你现在可以看到了。

标签: regex xml search sed extract


【解决方案1】:

使用XMLStarlet

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

这里没有太多提示,抱歉。

【讨论】:

  • 很不错的工具,不知道
猜你喜欢
  • 2010-12-15
  • 2013-07-25
  • 2015-09-07
  • 2020-11-13
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多