如何通过Bash脚本从XML文件提取Zip对应的Value值
如何用Bash从XML中提取指定条件的值?
别担心,我懂你的痛点——之前用grep只能捞出所有
方案一:用grep的上下文匹配(适合简单XML结构)
如果你的XML结构比较固定,
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表达式的意思是:
- 定位到根节点
<metadata> - 找到子节点
<versioning>-><snapshotVersions> - 筛选出
<extension>等于zip的<snapshotVersion>节点 - 提取该节点下
<value>的文本内容
如果你的系统没有xmllint,先安装对应的包:
- Debian/Ubuntu:
sudo apt install libxml2-utils - CentOS/RHEL:
sudo yum install libxml2
内容的提问来源于stack exchange,提问作者user2274204
相关产品推荐
相关产品推荐

