string - Bash 正则表达式仅用于数字和点

标签 string bash

有一个文件夹,其中包含两个文件,例如:filename-3.0.1-extra.jarfilename-3.0.1.jar。中间的数字和点是版本,可以更改。我正在尝试将 filename-3.0.1.jar 复制到另一个文件夹。 像这样的东西:

cp folder1/filename-*.jar otherfolder/

但是通配符 * 与两个文件都匹配。我试图仅复制文件,末尾不带 -extra 。因此,当我复制时,我尝试仅将文件名与数字和点相匹配,如下所示:

cp文件夹1/文件名-[0-9.].jar otherfolder/

但这不是正则表达式的正确语法。非常感谢这里的任何帮助!

更新:

我对此有所了解:

ls | grep -e "filename-[0-9]\.[0-9]\.[0-9]\.jar"

但是正则表达式似乎有点僵化。有没有办法将其缩短为类似 "filename-([0-9]+[\.])+jar"

这样即使像 filename-32.430.3.jar 这样的情况也会被捕获?

最佳答案

使用 extglob 你可以这样做:

shopt -s extglob
cp folder1/filename-+([0-9.]).jar otherfolder/

此处 +([0-9.]) 将匹配 1 个或多个任意数字或点。


根据您编辑的问题,您似乎正在尝试将 grep 与正则表达式一起使用。您可以使用此 grep 解决方案:

printf '%s\n' *.* | grep -E '^filename-([0-9]+\.)+jar$'

filename-3.0.1.jar

关于string - Bash 正则表达式仅用于数字和点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72820446/

相关文章:

linux - bash脚本调用另一个应用程序时如何向stderr输出添加附加信息

linux - Bash 脚本 Linux 打印 html 标签结束

bash - Bash 脚本中的字符串比较未按预期工作

macos - psql:找不到命令 Mac

java - 如何在 Java 中取消转义 HTML 字符实体?

string - 特定字体中字符串的长度

c# - 如何检查 C# 中的字谜字符串

.net - 字符串不变性

java - 正则表达式 - 检查子字符串是否不是模式的一部分

bash - 使用 unicode 文件名的可移植(跨平台)脚本