Text-Processing
使用 awk 或 sed 更改 XML 標記的值
所以我有一個 XML 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>platform</artifactId> <groupId>com.test.aem</groupId> <version>6.1.1-SNAPSHOT</version> </parent>
我想將 的值更新為
version
新值<version>6.5.0-SNAPSHOT</version>
但我想確保它僅在本
<parent>
節中更新,而不是文件中的其他任何地方。這可能使用bash嗎?遺憾的是我不能使用
xmlstarlet
,因為它不包含在容器中。
撇開 XML 片段的格式不正確(您錯過了尾隨
</project>
元素關閉)並修復它,正確的答案是您應該使用 XML 解析器來解析和編輯 XML。xmlstarlet edit --update '/_:project/_:parent/_:version' --value '6.5.0-SNAPSHOT' pom.xml <?xml version="1.0"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>platform</artifactId> <groupId>com.test.aem</groupId> <version>6.5.0-SNAPSHOT</version> </parent> </project>
每個元素名稱的
_:
前綴都是必需的萬用字元,因為您位於單獨的命名空間 (xmlns=...
) 中。您當然可以將輸出寫入臨時文件,然後用結果替換原始文件。或者
xmlstarlet edit --inplace
,如果您絕對確定您正在進行有效的編輯,請使用。