You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash编写仅匹配数字与点的正则 筛选复制指定版本jar文件

匹配任意段版本号、排除带-extra后缀Jar文件的实现方案

方案1:使用Shell扩展通配(无管道,写法最简洁)

Bash环境下可以直接开启扩展通配功能,不需要调用grep、awk等额外命令,一条指令即可完成复制:

# 开启当前会话的扩展通配能力
shopt -s extglob
cp folder1/filename-+([0-9.]).jar otherfolder/

语法说明:

  • +([0-9.])是扩展通配规则,代表匹配1个及以上由数字、半角点组成的字符,刚好适配任意段数、任意位数字的版本号格式
  • 带-extra后缀的文件因为包含横杠、英文字母,不在[0-9.]的匹配范围内,会被自动排除
  • 操作完成后如果需要恢复默认通配规则,执行shopt -u extglob即可

方案2:使用Grep正则过滤(全Shell环境兼容)

如果不想修改Shell默认配置,可以用扩展正则写匹配规则,适配任意段版本号,配合xargs完成复制:

ls folder1/ | grep -E "filename-[0-9]+(\.[0-9]+)*\.jar$" | xargs -I {} cp folder1/{} otherfolder/

正则规则说明:

  • 加-E参数开启扩展正则模式,不需要写大量冗余转义符
  • [0-9]+匹配版本号的第一段数字,支持多位数字(比如32、430)
  • (\.[0-9]+)*匹配0次及以上「半角点+数字」的组合,不管版本号是2段、3段还是更多段都能覆盖
  • 末尾加$锚定行尾,确保文件名以.jar结尾,从规则上排除后面带-extra等额外后缀的文件

常见失效写法原因

  • 基础通配cp folder1/filename-*.jar otherfolder/:*会匹配任意长度的任意字符,会同时命中带-extra后缀的文件
  • 通配写法filename-[0-9.].jar:基础通配里的[0-9.]仅匹配单个数字或半角点,无法匹配多字符组成的完整版本号
  • 固定三段正则filename-[0-9]\.[0-9]\.[0-9]\.jar:写死了版本号的段数,遇到多段版本、多位数字版本的场景就会漏匹配

内容的提问来源于stack exchange,提问作者covfefe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:12:17