You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本从XML文件提取Zip对应的Value值

如何用Bash从XML中提取指定条件的值?

别担心,我懂你的痛点——之前用grep只能捞出所有标签的值,但你只想要对应是zip的那个,对吧?这里给你两个实用的方案,从简单到专业都有:

方案一:用grep的上下文匹配(适合简单XML结构)

如果你的XML结构比较固定,zip和对应的是紧挨着的,直接用grep的上下文参数就能搞定:

curl -s https://www.artifactoty.company.net/artifactory/maven-dev-local/com/google/api/framework/maven-metadata.xml --insecure | grep -B1 -A1 '<extension>zip</extension>' | grep -oP '(?<=<value>).*?(?=</value>)'
  • -B1:显示匹配到<extension>zip</extension>的前1行内容
  • -A1:显示匹配行的后1行内容
  • 最后再用你之前的grep命令提取里的文本,这样就只会拿到zip对应的那个值了

方案二:用xmllint+XPath(更稳定,推荐)

正则处理XML其实不是最佳实践,万一XML格式变了(比如换行、缩进调整),grep可能就失效了。用专业的XML解析工具xmllint更靠谱:

curl -s https://www.artifactoty.company.net/artifactory/maven-dev-local/com/google/api/framework/maven-metadata.xml --insecure | xmllint --xpath '/metadata/versioning/snapshotVersions/snapshotVersion[extension="zip"]/value/text()' -

这个XPath表达式的意思是:

  1. 定位到根节点<metadata>
  2. 找到子节点<versioning> -> <snapshotVersions>
  3. 筛选出<extension>等于zip的<snapshotVersion>节点
  4. 提取该节点下<value>的文本内容

如果你的系统没有xmllint,先安装对应的包:

  • Debian/Ubuntu:sudo apt install libxml2-utils
  • CentOS/RHEL:sudo yum install libxml2

内容的提问来源于stack exchange,提问作者user2274204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:41:37