从特定的数据中提取数值阻止网页中的

从特定的数据中提取数值阻止网页中的

客观的:使用curl从远程服务器上某个div块中嵌入的一系列span块中提取数值

我需要从状态页面中提取一些数字,并确定保存这些数字的 div 块。

格式如下;

<div class="stats-values"><img src="some-image-name.jpg"><span>[numeric]</span> <img src="some-image-name.jpg"><span>[numeric]</span></div>

来源全部在一行中。这个特定的 div 块仅出现一次,并且可以通过类名轻松识别,但可能包含多达 6 或 7 个 span 块,这正是我所追求的;这些跨度块没有 ID 或类。

我对装饰图像不感兴趣,只对跨度块内的数字感兴趣,我想输出逗号或空格分隔的数字。

我想象它应该是这样的:

curl http://webpage.example.com/status | grep "<div class=\"stats-values\">.*</div>" | grep "<span>.*</span>"

我尝试了一些在杂项搜索中出现的例子。论坛,但到目前为止还没有结果。

我希望能得到有关结构和语法的指针,无论是 grep、sed 还是 awk。

答案1

curl http://webpage.example.com/status             |\
    grep -oP '<div class="stats-values">.*?</div>' |\
    grep -oP '(?<=<span>)\[.*?\](?=</span>)'

首先grep提取相关<div ...></div>块;
第二步grep提取内部块内的数字部分<span>[...]</span>

(?<=pattern)PCRE 是 GNU 的正向后向扩展,grep我们启用它与 switch 一起使用-P
(?=pattern)是 PCRE 正向前瞻扩展。

(?<=<span>)\[.*?\](?=</span>)意味着我们的模式[nuerical]完全在这两个模式之内;这些是不包含在输出中的,并且只会返回匹配和找到的内部模式。

.*是贪婪匹配(最长可能的匹配);.*?是非贪婪的(最短的可能匹配)

相关内容