我有我希望是一個簡單的問題,這是一個困難的問題。我需要一個安裝文件,名稱類似:試圖從OSX中使用sed中的字符串中刪除版本號
installer_v0.29_linux.run
installer_v10.22_linux_x64.run
installer_v1.1_osx.app
installer_v5.6_windows.exe
,並與格式
installer_linux.zip
installer_linux_x64.zip
installer_osx.zip
installer_windows.zip
壓縮它到一個文件我已經在OSX上運行一個bash腳本做幾乎一切我需要在構建鏈,肯定我可以使用的東西,像sed實現這一目標:
ZIP_NAME=`echo "$OUTPUT_NAME" | sed -E 's/_(?:\d*\.)?\d+//g'`
也就是說,一個空白代替正則表達式_(?:\d*\.)?\d+
- 正則表達式應該匹配任何以下劃線開頭的小數。
但是,當我嘗試運行此操作時,出現錯誤RE error: repetition-operator operand invalid
。在這個階段,我很難過 - 我已經Google了谷歌搜索,看不到我做錯了什麼。我寫的正則表達式在Regexr上正常工作,但顯然它的某些元素不被OSX中的sed實現支持。有誰知道我做錯了什麼?
謝謝,這太棒了!你能否解釋我做錯了什麼以及這個解決方案背後的邏輯?我還沒有見過像[[:alnum:]]之類的令牌。 – stefandz
'[[:alnum:]]'是POSIX類以匹配字母或數字。你的正則表達式匹配一個下劃線後面的數字,而有一個字母'v'。除'\ d'外是'sed'不支持的PCRE類。在sed中,您需要使用'[0-9]'或'[[:digit:]]'作爲'\ d' – anubhava
完美,非常簡潔明瞭的解釋謝謝! – stefandz