使用OS X Bash sed在git提交之前更新版本号

我希望使用git log --oneline | wc -l为以下Lua文件(简化版)中的每个提交提供修订号,使用脚本和$GIT / hooks进行替换:

- 设置.lua
  等本地模块= {}

  --主要,次要,构建和修订号
  等模块。版本=“10.0.0.0”

返回模块

我正在使用以下命令行进行测试:

sed -E 's/(version\s*=\s*\"\d+\.\d+\.\d+\.)/\1foo"/' settings.lua

所有“sed”输出的都是以下原样副本:

- 设置.lua
  等本地模块= {}

  - 主要,次要,构建和修订号
  等模块。版本=“10.0.0.0”

返回模块

我一定完全误解了我读到的关于“ sed”及其存在的目的的事物。从20年的C / C ++背景到现在的C#,我很惊讶我无法理解这一点。我知道模式匹配!

我的“ sed”理解是它将匹配“版本=“10.0.0.0””,然后将整个匹配的字符串更改为“版本=“10.0.0.foo””,完成后我只需简单地“和“> settings.au”以将原始文件替换为替换的文件即可。

像往常一样,我偏离了轨道,认为某些事情会很简单,但它并不简单,只是因为我想要它。我真的很享受Lua部分。

点赞
用户2290847
用户2290847

sed中,\d不能按您预期的方式工作。使用[0-9][[:digit:]]而非\d

编辑

另一种方法:

sed -i.bak '/module.version/s/"$/foo"/' File

AMD$ cat File
-- settings.lua

local module = {}

    -- major, minor, build, and revision number
    module.version = "10.0.0.0foo"

return module

对于匹配module.version的行,将最后一个"替换为foo"。上述命令将原地编辑文件并保留备份。

2015-10-16 10:35:05