Text-Processing

使用 awk 或 sed 更改 XML 標記的值

  • March 30, 2022

所以我有一個 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,如果您絕對確定您正在進行有效的編輯,請使用。

引用自:https://unix.stackexchange.com/questions/697243