我有几份文件:
java-opentimelineio-0.14.0-beta-1-sources.jar
java-opentimelineio-0.14.0-beta-1.jar
java-opentimelineio-0.14.0.jar我试图使用regex来匹配这样的文件名:
find . -type f -name "[[:alnum:]]*[.][0-9]*(-beta-)?[0-9]*.jar"我希望regex只匹配以下几个:
java-opentimelineio-0.14.0-beta-1.jar
java-opentimelineio-0.14.0.jar但我没拿到火柴。据我所知,任何字符后面的*将匹配该字符的零次或多次出现,而?将匹配该字符的零次或一次出现。我哪里出问题了?
发布于 2021-03-30 22:00:19
您可以使用
> 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字符串。https://stackoverflow.com/questions/66878805
复制相似问题