You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下使用sed和grep的Bash脚本报错,请求修复

修复macOS下Flutter版本号递增脚本

原脚本问题分析

你的脚本触发两个错误:

  • grep错误:macOS自带BSD grep,不支持(?<=...)正向预查语法,导致正则解析失败。
  • sed错误:BSD sed默认使用基础正则,捕获组需用\(...\)而非(...);且你原替换逻辑错误(将build号替换为补丁号片段,未实现递增),同时未启用扩展正则模式。

修复后的完整脚本

#!/bin/bash

# 读取pubspec.yaml中的版本号(兼容macOS BSD工具链)
version=$(grep 'version:' pubspec.yaml | awk '{print $2}')

# 拆分版本号各组成部分:主版本、次版本、补丁号、Build号
IFS='.-+' read -r major minor patch _ build <<< "$version"

# 递增补丁号与Build号
new_patch=$((patch + 1))
new_build=$((build + 1))

# 拼接生成新版本号
new_version="${major}.${minor}.${new_patch}-alpha+${new_build}"

# 原地替换pubspec.yaml中的版本号(BSD sed语法)
sed -i '' "s/version:.*/version: ${new_version}/" pubspec.yaml

关键修复点说明

  • 替换grep逻辑:改用grep + awk组合提取版本号,避开BSD grep的预查限制,更稳定可靠。
  • 版本号拆分:通过IFS设置分隔符,将0.2.6-alpha+26拆分为major=0、minor=2、patch=6、build=26,便于单独修改。
  • 递增实现:直接用算术运算$((...))对数字字段+1,比正则替换更直观,避免正则匹配失误。
  • 适配BSD sed:macOS的sed需用-i ''实现原地替换(空字符串表示不生成备份文件),替换正则精准匹配版本号行。

测试效果

原版本行:

version: 0.2.6-alpha+26

运行脚本后将变为:

version: 0.2.7-alpha+27

内容的提问来源于stack exchange,提问作者xetra11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:30:42