我有我希望是一个简单的问题,这是一个困难的问题。我需要一个安装文件,名称类似:试图从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