我有这个字符串“ foo1.0_1.0”,我想根据第二个“。”后面的数字加1,该数字可以超过一位。
这是我的尝试:
str="foo1.0_1.0"
version="${str##*.}" # gives 0
new_version="$((version + 1))" # gives 1
echo "${str/${str##*.}/$new_version}" # gives foo1.1_1.0 (desired: foo1.0_1.1)
因为它将${str##*.}
的结果作为模式。
如何实现?更一般而言,如何在第二次出现某个字符(在这种情况下为点)后替换子字符串?
答案 0 :(得分:1)
使用awk
可以将点用作定界符并增加第三个字段:
awk 'BEGIN{FS=OFS="."} {$3++} 1' <<< "$str"
foo1.0_1.1
答案 1 :(得分:1)
您也可以像这样使用sed
:
#!/bin/bash
str=foo1.0_1.0
header=$(echo $str | sed -n 's/\(.*\.\)[0-9]*/\1/p')
ending=$(echo $str | sed -n 's/.*\.\([0-9]\)/\1/p')
ending=$((ending + 1))
echo $header$ending
答案 2 :(得分:1)
您还可以使用此方法,它是对代码的修改
str="foo1.0_1.0"
version="${str##*.}" # gives 0
new_version="$((version + 1))" # gives 1
echo "${str%${version}}${new_version}"
# gives foo1.0_1.1
答案 3 :(得分:1)
具有阅读权限和heredoc:
str="foo1.0_1.17"
while IFS='.' read a b c
do
echo $a"."$b"."$((c+1))
done <<EOF
$str
EOF