【问题标题】:Replace version number in file with sed in Bash script用 Bash 脚本中的 sed 替换文件中的版本号
【发布时间】:2020-04-24 06:36:25
【问题描述】:

在我的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]+\)/\1${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}/" project.pro

为什么这不起作用?

到目前为止,我已经设法要么根本没有匹配到,要么得到一些奇怪的 replace-only-the-last-number 替换。

【问题讨论】:

  • 这里为什么需要\\\?
  • 这是一些 Qt 项目文件垃圾,以便将值作为字符串正确传递给编译器。编译器必须得到-DVERSION=\"1.13.1\"

标签: linux sed version


【解决方案1】:

你可以使用这个sed:

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

您的尝试中很少遇到问题:

  • 如果没有扩展正则表达式模式 (-E),+ 不能不转义使用。
  • 点需要在正则表达式中转义
  • 无需使用捕获组和反向引用\1

PS:.bak是备份文件的扩展名,这样你可以得到原文件,以防替换错误。

【讨论】:

  • .bak 是什么?它是否存在并不重要。
  • 在回答中添加了关于.bak 的注释。
猜你喜欢
  • 2013-04-30
  • 2021-03-23
  • 2021-09-29
  • 2010-11-29
  • 2017-09-06
  • 2011-08-28
  • 2020-09-22
  • 2022-12-17
  • 1970-01-01
相关资源
最近更新 更多