【问题标题】:Value parsing from XML tag从 XML 标签解析值
【发布时间】:2016-04-24 22:12:10
【问题描述】:
cat /home/user/my.xml | grep -e productVersion | awk {'print $2'}

它从文件my.xml 中解析数据,其中我有这样的标签:

<product productVersion="10.2.14.0" Type="test" Sub="0.3">

最后我有一个好结果:

productVersion="10.2.14.0"

但是在其他桌面上的任何最旧版本的 XML 上,列不能是 2 美元和 3 美元,以及 4 美元等。当然,我尝试做 ID ELSE,它可以工作,但我真的不知道每台 PC 上的每一列。

可能是一些功能或技巧,例如我可以在哪里放置 productVersion=* 以及我可以在哪里看到标签 productVersion="10.2.14.0" 的结果?

【问题讨论】:

  • grep -o 'productVersion="[^"]*"' 或者使用 XML 解析器。顺便说一句,这不是一个标签,它是一个属性。还有no need for cat
  • 非常感谢。是的对不起,当然属性:)

标签: linux bash awk sh


【解决方案1】:

使用适当的解析器从 XML 中提取信息。

xmllint my.xml --xpath '//product/@productVersion'

【讨论】:

  • 很好的答案,但我有 TinyCore linux,但该命令不存在。总之谢谢
  • @mulrus: 你不能安装libxml2吗?
  • 很遗憾没有。大量桌面没有连接到 Internet 的存储库。和 TinyCore 也有不同的版本。 grep 最好的方法。
  • 那么希望您永远不会收到带有注释部分和类似技巧的 XML。
  • 没有。这对我来说已经足够了。 XML 没有那么大。我已经完成了我想要的任务。
【解决方案2】:

既然您要求 awk 答案:

$ awk 'match($0,/productVersion="[^"]+"/){ print substr($0,RSTART,RLENGTH) }' file
productVersion="10.2.14.0"

或在傻瓜中:

$ awk 'match($0,/productVersion="[^"]+"/,a){ print a[0] }' file
productVersion="10.2.14.0"

请注意,刻度在 awk 脚本之外 (awk '&lt;whole script&gt;'),而不是在大括号 awk {'&lt;rest of script&gt;'}) 内,因为刻度是脚本分隔符,而大括号只是脚本的一部分。

【讨论】:

  • 谢谢,也加在我的记忆里
猜你喜欢
  • 1970-01-01
  • 2010-12-16
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
相关资源
最近更新 更多