首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配bash中较长字符串中的特定模式?

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

Stack Overflow用户
提问于 2021-03-30 21:39:04
回答 1查看 81关注 0票数 1

我有几份文件:

代码语言:javascript
复制
java-opentimelineio-0.14.0-beta-1-sources.jar
java-opentimelineio-0.14.0-beta-1.jar
java-opentimelineio-0.14.0.jar

我试图使用regex来匹配这样的文件名:

代码语言:javascript
复制
find . -type f -name "[[:alnum:]]*[.][0-9]*(-beta-)?[0-9]*.jar"

我希望regex只匹配以下几个:

代码语言:javascript
复制
java-opentimelineio-0.14.0-beta-1.jar
java-opentimelineio-0.14.0.jar

但我没拿到火柴。据我所知,任何字符后面的*将匹配该字符的零次或多次出现,而?将匹配该字符的零次或一次出现。我哪里出问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-30 22:00:19

您可以使用

代码语言:javascript
复制
> find . -type 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引擎。

Regex细节

  • .* -任何零或多个chars
  • / -一个/ char
  • [^/]+ -一个或多个字符而不是/
  • - -一个hyphen
  • [0-9]+\.[0-9]+\.[0-9]+ -“版本”-like模式:一个或多个数字,.,一个或多个数字,.,一个或多个digits
  • (-beta-[0-9]+)?,一个可选的-beta-字符串,然后一个或多个digits
  • \.jar -一个.jar字符串。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66878805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档