我有一个来自curl命令的URL的一部分,如:
<span class="h2">Newest Version 2.1.4</span>
(结果更长,但这也应该这样做。我想要一个只留下的sed或awk语句
2.1.4
什么是最“动态”的方式呢?是否可以仅在“版本”一词之后过滤数字
使用xmllint试试这个:
curl ...... |
xmllint --html --xpath '//span[@class="h2"]/text()' |
grep -oP 'Newest Version \K.*'
最“动态”的方式并非如此。您需要最强大和最灵活的方式。
xmlstarlet
解决方案:
xmlstarlet sel -t -v 'substring(//span[@class="h2"]/text(), 16)' -n input.html
输出:
2.1.4
处理XML / HTML数据时始终使用XML / HTML解析器。
您可以使用以下命令,该命令必须通过管道传递到将获取您的html文件的命令(curl
或其他)
xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -
说明:
--html
激活HTML解析器模式--xpath
来评估xpath表达式,这里的xpath表达式是:'substring-after(//span[@class="h2"],"Newest Version ")'
是用于从所有span元素中获取具有属性class="h2"
的xpath表达式然后从该节点获取Newest Version
之后的子字符串-
让xmllint
在stdin
上工作而不是从文件中工作是很重要的。测试:
$ echo '<span class="h2">Newest Version 2.1.4</span>' | xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -
2.1.4