[英]Extract latest version from xml file using shell script
我試圖從我的存儲庫中獲取最新的工件編號,我不能使用<release>3.4.6.17</release>
標簽,因為我想控制我從中獲取最新版本的版本。
例如在這個maven-metadata.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.company.platform</groupId>
<artifactId>platform</artifactId>
<versioning>
<release>3.4.6.17</release>
<versions>
<version>3.3.0.89</version>
<version>3.3.17.65</version>
<version>3.3.17.66</version>
<version>3.3.19.65</version>
<version>3.4.2.70</version>
<version>3.4.2.71</version>
<version>3.4.4.39</version>
<version>3.4.4.40</version>
<version>3.4.4.41</version>
<version>3.4.4.42</version>
<version>3.4.6.1</version>
<version>3.4.6.2</version>
<version>3.4.6.3</version>
<version>3.4.6.4</version>
<version>3.4.6.16</version>
<version>3.4.6.17</version>
</versions>
<lastUpdated>20201011113748</lastUpdated>
</versioning>
</metadata>
我想獲得最新的3.4.4
版本,即: 3.4.4.42
。
而不是最新上傳的工件,即: 3.4.6.17
。
shell 腳本中有沒有辦法按給定版本(版本 = 3.3.4)解析該文件?
如果此 xml 文件總是如此扁平,您可以使用grep
和 PCRE 來匹配版本節點內的文本,然后使用 GNU sort
進行版本排序-V
並為您的輸入模式獲取更新的版本:
grep -oP '(?<=<version>)3\.4\.4.*?(?=</version>)' file.xml | sort -V | tail -1
3.4.4.42
通常,您可以在 shell 中找到許多可以解析 xml 文件並選擇其中任何部分的工具,例如xmllint
、 xpath
、 xmlstarlet
等。它們不僅僅解析文本,這是正確xmlstarlet
安全的方法。 下面是一個例子:
xmlstarlet sel -t -m '//version[starts-with(., "3.4.4")]' -v . -n file.xml
3.4.4.39
3.4.4.40
3.4.4.41
3.4.4.42
再次,您可以將上述內容通過管道傳輸到sort -V
。
cat test.xml | grep -E "<version>3\.4\.4.*</version>" | sort | tail -n 1 | sed 's/<.*>\(.*\)<\/.*>/\1/g' | tr -d [:blank:]
3.3.4 ...
開頭的版本3.3.4 ...
假設:
一種awk
解決方案:
$ baseversion='3.4.4'
$ awk -F'[><]' -v bv="^${baseversion}" ' # use ">" and "<" as input field delimiters; build search pattern "^{baseversion}" and pass in as variable "bv"
$2=="version" && $3 ~ bv { latestversion=$3 } # if field2 equals the string "version" and field3 starts with our "^baseversion" pattern then save field3 in "latestversion"
END { print latestversion } # print the latest version
' maven*xml
3.4.4.42
刪除注釋的單行:
$ awk -F'[><]' -v bv="^${baseversion}" '$2=="version" && $3 ~ bv { latestversion=$3 } END { print latestversion }' maven*xml
3.4.4.42
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.