Regex 如何在bash中匹配较长字符串中的特定模式?

Regex 如何在bash中匹配较长字符串中的特定模式?,regex,bash,Regex,Bash,我有几个文件: java-opentimelineio-0.14.0-beta-1-sources.jar java-opentimelineio-0.14.0-beta-1.jar java-opentimelineio-0.14.0.jar 我正在尝试使用正则表达式匹配文件名,如下所示: find . -type f -name "[[:alnum:]]*[.][0-9]*(-beta-)?[0-9]*.jar" 我希望正则表达式只匹配以下内容: java-opent

我有几个文件:

java-opentimelineio-0.14.0-beta-1-sources.jar
java-opentimelineio-0.14.0-beta-1.jar
java-opentimelineio-0.14.0.jar
我正在尝试使用正则表达式匹配文件名,如下所示:

find . -type f -name "[[:alnum:]]*[.][0-9]*(-beta-)?[0-9]*.jar"
我希望正则表达式只匹配以下内容:

java-opentimelineio-0.14.0-beta-1.jar
java-opentimelineio-0.14.0.jar
但我没有找到匹配的。据我所知,任何字符后面的
*
将匹配该字符的零次或多次出现,而
将匹配该字符的零次或一次出现。我哪里出错了?

您可以使用

>查找-类型f-regextype posix egrep-regex'.*/[^/]+-[0-9]+\[0-9]+\[0-9]+(-beta-[0-9]+)?\.jar'
./java-opentimelineio-0.14.0-beta-1.jar
./java-opentimelineio-0.14.0.jar
请记住,正则表达式可以与
-regex
选项一起使用,并且它必须匹配整个路径

-regextype posix egrep
选项允许使用“更简单”(意味着涉及的转义更少)的posix ERE引擎

正则表达式详细信息:

  • *
    -任何零个或多个字符
  • /
    -a
    /
    字符
  • [^/]+
    -一个或多个字符,而不是
    /
  • -
    -连字符
  • [0-9]+\.[0-9]+\.[0-9]+
    -“版本”式模式:一个或多个数字,
    ,一个或多个数字,
    ,一个或多个数字
  • (-beta-[0-9]+)?
    -可选的
    -beta-
    字符串,然后是一个或多个数字
  • \.jar
    -一个
    .jar
    字符串
您可以使用

>查找-类型f-regextype posix egrep-regex'.*/[^/]+-[0-9]+\[0-9]+\[0-9]+(-beta-[0-9]+)?\.jar'
./java-opentimelineio-0.14.0-beta-1.jar
./java-opentimelineio-0.14.0.jar
请记住,正则表达式可以与
-regex
选项一起使用,并且它必须匹配整个路径

-regextype posix egrep
选项允许使用“更简单”(意味着涉及的转义更少)的posix ERE引擎

正则表达式详细信息:

  • *
    -任何零个或多个字符
  • /
    -a
    /
    字符
  • [^/]+
    -一个或多个字符,而不是
    /
  • -
    -连字符
  • [0-9]+\.[0-9]+\.[0-9]+
    -“版本”式模式:一个或多个数字,
    ,一个或多个数字,
    ,一个或多个数字
  • (-beta-[0-9]+)?
    -可选的
    -beta-
    字符串,然后是一个或多个数字
  • \.jar
    -一个
    .jar
    字符串

你应该使用
-name
而不是
-regex
这不仅仅是关于
find
如何工作,regex也需要修复。你应该使用
-name
而不是
-regex
这不仅仅是关于
find
如何工作,regex也需要修复。