我希望使用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部分。
答案 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"
。
上面的命令将在原地编辑文件,保留备份。