Actualización de numbers de versión antes de la confirmación de git con OS X Bash sed

Deseo usar git log --oneline | wc -l git log --oneline | wc -l para proporcionar el número de revisión para la sustitución sed en el siguiente file Lua (simplificado) durante cada confirmación mediante un script y $ GIT / hooks:

 -- settings.lua local module = {} -- major, minor, build, and revision number module.version = "10.0.0.0" return module 

Estoy probando desde la command-line con esto:

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

Todas las salidas sed son la siguiente copy literal de la input:

 -- settings.lua local module = {} -- major, minor, build, and revision number module.version = "10.0.0.0" return module 

Debo estar totalmente malentendiendo las cosas sobre las sed estoy listo acerca de sed y su propósito en la vida. Viniendo de un background de 20 años C / C ++ y ahora C # estoy sorprendido de que no puedo entender esto. Sé que el patrón coincide!

Mi comprensión de sed es que coincidirá con version = "10.0.0.0" y luego cambiará toda la cadena coincidente a version = "10.0.0.foo" que una vez hecho puedo "y a > settings.au " simple para replace el file original con la subestación en su lugar.

Como de costumbre, me alejé demasiado de la pista pensando que algo iba a ser simple pero no lo era y solo porque lo quiero. Realmente estaba disfrutando la parte de Lua también.

En sed , \d no funcionaría de la manera que esperas que funcione. Utilice [0-9] o [[:digit:]] lugar de \d

EDITAR

Otra forma de hacerlo:

 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 

Para las líneas que coincidan con module.version , sustituya el último " con foo" . El command anterior editará el file en el lugar, manteniendo una copy de security.