我想在 pom.xml 文件中找到对 SNAPSHOT 版本的引用。让我们使用位于 here 的 POM 文件举个例子。我想出了以下命令来查找包含字符串 SNAPSHOT 的元素:
$ xmlstarlet sel -t -m "//*[contains(text(), 'SNAPSHOT')]" -v . -n pom.xml
0.2-SNAPSHOT
4.12-SNAPSHOT
1.9.13-SNAPSHOT
20.0-SNAPSHOT
然而,正如上面所见,这只给我匹配本身的文本。我想看到的是关于匹配位置的更多上下文,例如通向匹配元素的路径,如下所示:
$ xmlstarlet magical arguments
/project/version: 0.2-SNAPSHOT
/project/dependencies/dependency: 4.12-SNAPSHOT
/project/properties/jackson.version: 1.9.13-SNAPSHOT
/project/properties/guava.version: 20.0-SNAPSHOT
或者,将 XML 的精简版本作为输出也对我有用,例如:
$ xmlstarlet magical arguments
<project>
<version>0.2-SNAPSHOT</version>
<dependencies>
<dependency>
<version>4.12-SNAPSHOT</version>
</dependency>
</dependencies>
<properties>
<jackson.version>1.9.13-SNAPSHOT</jackson.version>
<guava.version>20.0-SNAPSHOT</guava.version>
</properties>
</project>
是否可以打印这些或其他类型的匹配发生位置的指示?
最佳答案
xmlstarlet 可以使用打破嵌套的 -b
选项生成请求的输出:
xmlstarlet sel -t \
-m "//*[contains(text(),'SNAPSHOT')]" \
-m 'ancestor::*' -v 'name()' -o '/' \
-b -v "concat(name(),': ',.)" -n pom.xml
输出:
project/version: 0.2-SNAPSHOT
project/dependencies/dependency/version: 4.12-SNAPSHOT
project/properties/jackson.version: 1.9.13-SNAPSHOT
project/properties/guava.version: 20.0-SNAPSHOT
关于xmlstarlet - 如何使用 xmlstarlet 打印 XPath 匹配的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097084/