我正在尝试使用 xmllint 从配置文件中解析 Solr 核心的名称。这有效:
xmllint --xpath /solr/cores/core/@name solr.xml |grep -Po '(?<=name=")[a-z-]+(?=")'
它返回类似:
core-a
core-b
...
这正是我想要的,但我想消除 grep。似乎只用 xpath 就可以做到这一点。如果没有 grep,输出将如下所示:
name="core-a" name="core-b" ...
将表达式包装起来将string()
多个输出减少到仅第一个(即core-a
仅此而已),这是没有用的。如何string
对每个结果应用该函数?
答案1
AFAIK,xmllint
相当有限。但你可以使用xmlstarlet
用它的sel
命令来执行你想做的事情。请参阅xmlstarlet sel --help
用法和示例。以你的例子来说,它将是:
xmlstarlet sel -T -t -m /solr/cores/core/@name -v . -n solr.xml