使用OS X Bash sed

时间:2015-10-16 10:17:00

标签: regex git bash sed lua

我希望使用git log --oneline | wc -l在每次提交期间使用脚本和$ GIT / hooks在以下Lua文件(简化)中提供sed替换的修订号:

-- settings.lua

local module = {}

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

return module

我从命令行测试:

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

所有sed输出都是输入的以下逐字副本:

-- settings.lua

local module = {}

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

return module

我必须完全误解我已经准备好的事情sed及其在生活中的目的。来自20年的C / C ++背景和现在的C#我很惊讶我无法理解这一点。我知道模式匹配!

我的sed理解是它会与version = "10.0.0.0"匹配,然后将整个匹配的字符串更改为version = "10.0.0.foo"一旦完成,我可以简单地使用#{1}}和> settings.au用原子文件替换原来的文件。

像往常一样,我已经离开了太远的轨道,认为某些事情会变得简单,但不是只是,因为我想要它。我也非常喜欢Lua部分。

1 个答案:

答案 0 :(得分:1)

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"。 上面的命令将在原地编辑文件,保留备份。