用awk或sed

时间:2018-03-04 21:54:11

标签: url curl awk sed

我有一个来自curl命令的URL的一部分,如:

<span class="h2">Newest Version 2.1.4</span>

(结果更长,但这也应该这样做。 我想要一个只留下

的sed或awk语句
2.1.4

最“动态”的方式是什么?是否可以仅在“版本”一词之后过滤数字

3 个答案:

答案 0 :(得分:1)

使用

尝试此操作
curl ...... |
xmllint --html --xpath '//span[@class="h2"]/text()' |
grep -oP 'Newest Version \K.*'

答案 1 :(得分:0)

最“动态”的方式并非如此。你需要最强大和最灵活的方式。

xmlstarlet 解决方案:

xmlstarlet sel -t -v 'substring(//span[@class="h2"]/text(), 16)' -n input.html

输出:

2.1.4

处理XML / HTML数据时始终使用XML / HTML解析器。

答案 2 :(得分:0)

您可以使用以下命令,该命令必须通过管道传递到将获取您的html文件的命令(curl或其他内容)

xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -

说明:

  1. --html激活HTML解析器模式
  2. --xpath来评估xpath表达式,这里的xpath表达式是:
  3. 'substring-after(//span[@class="h2"],"Newest Version ")'是xpath表达式,用于从属性class="h2"的所有span元素中获取然后从该节点获取Newest Version之后的子字符串
  4. 最后但同样重要的是,最后使用-xmllint工作stdin而不是使用文件。
  5. 测试:

    $ echo '<span class="h2">Newest Version 2.1.4</span>' | xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -
    2.1.4