2015-10-16 30 views
0

我希望每個期間使用git log --oneline | wc -l用於在以下的Lua文件(簡化的)sed取代提供修訂號提交使用腳本和$ GIT /鉤:更新版本號提交使用OS X擊的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"曾經做過我可以簡單的「和> settings.au,以取代與變電站的原始文件在地方。

像往常一樣我漂流路太遠偏離軌道思考的東西將是簡單的,但沒有和只是,因爲我想要的。我真的很享受在Lua的一部分了。

回答

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"替代過去的"。 上述命令將編輯inplace文件,並保留備份。

+0

這確實發生在我身上,我正在使用'[[:digit:]]'但感覺它太冗長了,並且當時所有的概念都是錯誤的。我正在修訂號碼上創建一個捕獲組,並希望能夠替代它。這甚至有可能嗎?我會盡快給出'[0-9]'試一試。謝謝!我會回來標記一次測試回答的問題。 –

+0

對不起,我不得不把它放在一邊,沒有時間考慮它:(我需要用'git log --oneline | wc -l'提供的那個替換最後一個數字。每次我找到它的用途時,更好地與sed,所以當時間允許我會解決它。 –