linux - 在字符 bash 第二次出现后替换子字符串

标签 linux string bash replace substring

我有这个字符串“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##*.} 的结果作为模式。

如何实现?更一般地说,如何在某个字符(在本例中为点)第二次出现后替换子字符串?

最佳答案

使用 awk,您可以使用点作为分隔符并增加第三个字段:

awk 'BEGIN{FS=OFS="."} {$3++} 1' <<< "$str"

foo1.0_1.1

关于linux - 在字符 bash 第二次出现后替换子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54588493/

相关文章:

python qt在后台等待热键

python - 如何分隔列表中字符串的第一部分和最后一部分

linux - 通过自己的脚本临时更改 bash 提示符

linux - 从不断更新的目录中读取更新

Bash 循环获取文件名中的前 12 个字符,使用输出为每个文件运行 touch -t 命令

c++ - "New"运算符的不同行为 - 动态内存分配

linux - 为什么 Linux 不断杀死 Apache?

c++ - 交叉编译错误 "arm-none-eabi-g++ cannot find entry symbol"

c++ - 在 arduino 上使用 strncat 方法输出错误值

python - 合并两个字符串(逐个字符)并重复最短字符串的最后一个字符