URL中带有awk或sed的curl部分

URL中带有awk或sed的curl部分,url,curl,awk,sed,xmllint,Url,Curl,Awk,Sed,Xmllint,我从curl命令中得到了URL的一部分,如: <span class="h2">Newest Version 2.1.4</span> 最“动态”的方法是什么?是否可以只过滤单词“Version”(版本)后的数字直到使用以下方法尝试: 最“动态”的方式并非如此。您需要最健壮和灵活的方法 xmlstarlet解决方案: xmlstarlet sel -t -v 'substring(//span[@class="h2"]/text(), 16)' -n input.htm

我从curl命令中得到了URL的一部分,如:

<span class="h2">Newest Version 2.1.4</span>
最“动态”的方法是什么?是否可以只过滤单词“Version”(版本)后的数字直到使用以下方法尝试:

最“动态”的方式并非如此。您需要最健壮和灵活的方法

xmlstarlet
解决方案:

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

2.1.4


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

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

解释:

$ echo '<span class="h2">Newest Version 2.1.4</span>' | xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -
2.1.4
  • --html
    以激活html解析器模式
  • --xpath
    要计算xpath表达式,这里的xpath表达式是:
  • 'substring-after(//span[@class=“h2”],“最新版本”)
    是用于从所有span元素中获取属性为
    class=“h2”
    的元素的xpath表达式,然后从该节点获取
    最新版本之后的子字符串
  • 最后但并非最不重要的一点是,在最后使用
    -
    使
    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
    
    (//span[@class=“h2”],“最新版本”)后的子字符串“
    $echo”最新版本2.1.4”| xmllint--html--xpath”-
    2.1.4
    
    您需要一个HTML解析器。您的注释都很好,但我有一个ash,没有bash。我也没有xmlstarlet或xmllint。这是Synology NAS上的一个脚本。我不推荐
    xmlstarlet
    ,因为它在现实生活中的html上失败了
    xmllint
    saxon lint
    可以将html解析为well@GillesQuenot,您低估了xmlstarlet的格式化/恢复posibilities@GillesQuenot相反,“您的”
    xmllint
    与高级编辑/提取无关
    xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -
    
    $ echo '<span class="h2">Newest Version 2.1.4</span>' | xmllint --html --xpath 'substring-after(//span[@class="h2"],"Newest Version ")' -
    2.1.4