だから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>
しかし、このセクションでのみ更新され、ファイルの他の場所では更新されないようにしたいと思います。バッシュは使えますか?
xmlstarlet
残念ながら容器に含まれていないため使用できません。
答え1
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
編集した内容が有効であると確信している場合は、この方法を使用できます。
答え2
xmlstarletユーティリティが存在しない場合にナビゲートできるもう1つのオプションはPythonです。
このetree
モジュールを使用してXML階層をナビゲートし、バージョンを変更します。
python3 -c 'import sys, xml.etree.ElementTree as ET
#> unpack command line arguments
new_ver,xml_file = sys.argv[1:]
#>
tree = ET.parse(xml_file)
root = tree.getroot()
#> traverse,selec, & modify the desired
#> node using XPath expressions
for e in root.findall("./parent/version"):
e.text = new_ver
# save changes
tree.write(xml_file)
' "6.5.0-SNAPSHOT" input.xml