如何在Bash中拆分字符串并提取指定字段(prod-v4.38示例)
解决方案
提取目标变量
可以通过Bash内置的参数展开(无需调用外部命令,更高效)或者awk一次性处理来得到期望的变量值:
方法1:Bash参数展开
OLD_VERSION="prod-v4.38" # 提取环境名称:去掉最后一个'-'及后面的所有内容 ENV_NAME=${OLD_VERSION%-*} # 提取主版本:先去掉开头到'-v'的内容,再去掉'.'及后面的内容 VER_MAJOR=${OLD_VERSION#*-v} VER_MAJOR=${VER_MAJOR%.*} # 提取次版本:去掉最后一个'.'前面的所有内容 VER_MINOR=${OLD_VERSION##*.} # 验证输出 echo "ENV_NAME" $ENV_NAME echo "VER_MAJOR" $VER_MAJOR echo "VER_MINOR" $VER_MINOR
执行后输出:
ENV_NAME prod VER_MAJOR 4 VER_MINOR 38
方法2:awk一次性提取
OLD_VERSION="prod-v4.38" # 使用[-v.]作为分隔符,一次性拆分并读取三个变量 read ENV_NAME VER_MAJOR VER_MINOR <<< $(echo "$OLD_VERSION" | awk -F'[-v.]' '{print $1, $3, $4}') # 验证输出 echo "ENV_NAME" $ENV_NAME echo "VER_MAJOR" $VER_MAJOR echo "VER_MINOR" $VER_MINOR
执行后同样得到期望的输出。
重新组合原字符串
用提取到的三个变量拼接即可:
REBUILT_VERSION="${ENV_NAME}-v${VER_MAJOR}.${VER_MINOR}" echo "$REBUILT_VERSION"
执行后输出:
prod-v4.38
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

