【发布时间】:2021-05-04 17:41:14
【问题描述】:
我正在寻找一种优雅的方式(bash 单行)来替换语义版本号的一部分。这些版本看起来像 7.12.0-0。我需要用比字符串中的数字大 2 的数字替换次要版本。
- 原字符串:7.12.0-0
- 结果字符串 7.14.0-0
【问题讨论】:
我正在寻找一种优雅的方式(bash 单行)来替换语义版本号的一部分。这些版本看起来像 7.12.0-0。我需要用比字符串中的数字大 2 的数字替换次要版本。
【问题讨论】:
使用 awk:
echo "7.12.0-0" | awk -F. '{print $1"."($2+2)"."$3}'
>7.14.0-0
或
echo "7.12.0-0" | awk 'BEGIN{OFS=FS="."}{$2+=2}1'
>7.14.0-0
【讨论】:
$2+=2 ;)
简单的 bash
ver="7.12.0-0"
# split on dots into the "parts" array
IFS="." read -ra parts <<<"$ver"
# increment the 2nd array element
((parts[1] += 2))
# join on dots
newver=$(IFS="."; echo "${parts[*]}")
echo $newver # => 7.14.0-0
【讨论】:
使用gnu sed:
s='7.12.0-0'
sed -E 's/^([0-9]*\.)([0-9]+)(\..+)/echo \1$((\2+2))\3/e' <<< "$s"
7.14.0-0
【讨论】:
仅使用 bash 变量扩展和cut:
v=17.12.0-0
add=2
echo ${v%%.*}.$(( $add + $(echo $v | cut -d . -f 2) )).${v##*.}
# output 17.14.0-0
【讨论】: