使用xmlstarlet精准提取Maven settings.xml中指定Server的嵌套属性值
xmlstarlet精准提取Maven settings.xml中指定Server的嵌套属性值
嗨,我来帮你搞定这个问题!你之前的命令会返回多余空白是因为直接提取了整个configuration节点的内容,包含了节点间的换行和空格。其实只要把XPath定位得更精准,就能直接拿到干净的name和value值,完全不用依赖sed这类工具来做后续清理。
单独提取Name值
用这条命令可以直接获取指定Server下的Private-Token名称:
xmlstarlet sel -t -m '//_:server[_:id="gitlab-company-name"]/_:configuration/_:httpHeaders/_:property' -v '_:name' -n ${HOME}/.m2/settings.xml
单独提取Value值
同样,精准定位到value节点就能拿到令牌值:
xmlstarlet sel -t -m '//_:server[_:id="gitlab-company-name"]/_:configuration/_:httpHeaders/_:property' -v '_:value' -n ${HOME}/.m2/settings.xml
同时输出Name和Value(带格式)
如果希望一次性输出成对的名称和值,比如用冒号分隔,也可以调整命令:
xmlstarlet sel -t -m '//_:server[_:id="gitlab-company-name"]/_:configuration/_:httpHeaders/_:property' -v '_:name' -o ": " -v '_:value' -n ${HOME}/.m2/settings.xml
为什么这个方法更可靠?
- 你之前用
-v '_:configuration'会返回整个节点下的所有文本,包括节点之间的空白字符,所以才会有多余的空行和空格。 - 直接定位到
_:name和_:value节点,xmlstarlet只会返回节点内的纯文本内容,不需要后续的过滤处理。 - 命令里的
_:是用来匹配settings.xml默认命名空间的写法,这个是正确的,不用修改。
备注:内容来源于stack exchange,提问作者Wojciech Sciesinski
相关产品推荐
相关产品推荐

