在 Bash 脚本中用 sed 替换文件中的版本号

Replace version number in file with sed in Bash script

在我的 project.pro 文件中我有:

DEFINES += VERSION=\\"1.13.1\\"

我想用 Bash 脚本中的新版本替换当前版本号:

VERSION_MAJOR=1
VERSION_MINOR=14
VERSION_PATCH=1

sed -i "s/\([0-9]+.[0-9]+.[0-9]+\)/${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}/" project.pro

为什么不起作用?

到目前为止,我要么根本没有找到匹配项,要么得到了一些奇怪的只替换最后一个数字的替换项。

您可以使用这个 sed:

sed -i.bak -E "s/[0-9]+\.[0-9]+\.[0-9]+/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH/" project.pro

您尝试中的几个问题:

  • 没有扩展的正则表达式模式 (-E),+ 不能未转义使用。
  • 点需要在正则表达式中转义
  • 无需使用捕获组和反向引用 </code>。</li> </ul> <p>PS: <code>.bak是备份文件的扩展名,这样你可以得到原始文件,以防替换错误。