【问题标题】:get only x.x.x from <version>x.x.x-SNAPSHOT</version> from this expression [closed]从此表达式中仅从 <version>x.x.x-SNAPSHOT</version> 获取 x.x.x [关闭]
【发布时间】:2020-10-18 22:58:54
【问题描述】:

INPUT-cat my.txt

当前文件的版本

<version>x.x.x-SNAPSHOT</version> 

期望的输出:

x.x.x

(数字和动态值)

尝试了多个 grep 和 awk 命令,但没有成功。

【问题讨论】:

标签: xml curl awk grep cut


【解决方案1】:

像这样:

xmllint --xpath '
    substring-before(//*[contains(text(), "-SNAPSHOT")]/text(), "-SNAPSHOT")
' file.xml

来自管道:

curl -s 'http://example.com/query_string' |
    xmllint --xpath '
        substring-before(//*[contains(text(), "-SNAPSHOT")]/text(), "-SNAPSHOT")
' -

您可以将结尾的 - 替换为 /dev/stdin

输出

x.x.x

注意

不要使用正则表达式解析 XML/HTML,使用适当的 XML/HTML 解析器和强大的 查询

您可以使用以下方法之一:

xmllint 通常默认安装libxml2-utils, xpath1

xmlstarlet 可以编辑、选择、变换... 默认不安装,xpath1

xpath 通过 perl 的模块 XML::XPath, xpath1 安装

xidelxpath3

saxon-lint 我自己的项目,包装在@Michael Kay 的 Saxon-HE Java 库,xpath3

或者你可以使用高级语言和适当的库,我认为:

lxml (from lxml import etree)

's XML::LibXML, XML::XPath, XML::Twig::XPath, HTML::TreeBuilder::XPath

,check this example

DOMXpath,check this example


检查:Using regular expressions with HTML tags

【讨论】:

  • 能否请您建议任何 grep 或 awk 命令,xmllint 不适合我
  • 不,正则表达式工具不是解析 XML 的方法。哪个操作系统/发行版/版本?
  • 我将其作为 curl 命令的输出,我想使用管道“|” grep 或 awk 将 x.x.x 剪切为输出,请提出类似的命令
  • 我认为这很明显,无论如何,帖子已相应编辑
猜你喜欢
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2014-12-16
  • 1970-01-01
  • 2020-06-07
  • 2016-03-11
  • 2023-02-04
相关资源
最近更新 更多