示例文件:
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>fake</id>
<username>username2</username>
<password>aa2</password>
</server>
<server>
<id>fake3</id>
<username>username3</username>
<password>aa3</password>
</server>
<server>
<id>gitlab-company-name</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>glpat-faketokenvalue-E</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
<mirrors>
[parially cut]
</mirrors>
现在我想分别返回settings
-> servers
-> server
(where id
= gitlab-company-name
) -> configuration
-> httpHeaders
-> property
->name
和value
- 的值。
我想出的最好的办法是:
xmlstarlet sel -t -m '//_:server[_:id="gitlab-company-name"]' -v '_:configuration' -n ${HOME}/.m2/settings.xml
但这也会返回结果之前的所有空格(它们被 StackExchange 格式截断):
Private-Token
glpat-faketokenvalue-E
我将其通过管道传输到 sed 和 head/tail,但这是一个肮脏的解决方法。
任何人都可以帮助我解决这个问题吗?先感谢您。
例如,您可以使用:
name
我所做的是将两个嵌套值( , )分开,并且它们之间value
有一个换行符(开关)。-n
结果:
或者,您也可以使用
concat
ANSI C 字符串 ( ) 内部$''
来解析换行符,假设您的 shell 支持该语法: