如何用AWK命令从可变命名的WAR文件名中提取版本号1.0.0?
适配可变文件名的版本号提取AWK命令
针对文件名前缀字段数可变的情况,推荐以下几种更通用的AWK命令:
方法1:基于版本号格式正则匹配
利用版本号x.x.x的数字加小数点特征直接匹配提取,适配所有符合该格式的版本号场景:
echo "s-pub-comtec-sap-product-app-1.0.0-mule-application.war" | awk '{match($0, /[0-9]+\.[0-9]+\.[0-9]+/); print substr($0, RSTART, RLENGTH)}'
原理:match函数定位符合数字.数字.数字的字符串位置,substr提取匹配到的内容,不受前缀字段数量影响。
方法2:反向定位固定后缀前的字段
如果版本号后的后缀(-mule-application.war)固定,可通过总字段数反向计算版本号位置:
echo "s-pub-comtec-sap-app-1.0.0-mule-application.war" | awk -F '-' '{print $(NF-2)}'
原理:NF表示当前行的总字段数,版本号是倒数第3个字段(倒数第2个是mule,最后1个是application.war),无需关心前缀字段数量。
方法3:先移除固定后缀再取最后一段
先去掉文件名末尾的固定后缀,再提取最后一个-分隔的内容,精准度更高:
echo "s-pub-comtec-sap-product-app-1.0.0-mule-application.war" | awk '{sub(/-mule-application\.war$/, ""); split($0, arr, "-"); print arr[length(arr)]}'
原理:sub移除末尾固定后缀后,用split按-分割为数组,取数组最后一个元素即为版本号,避免了其他数字串干扰。
内容的提问来源于stack exchange,提问作者Vamsi
相关产品推荐
相关产品推荐

