我如何find这个string?

我试图用find命令来匹配这些文件名:

4702011-10-21CR719557-R85262-ALPHA.jar 4702011-10-21CR719557-R85262-BETA.jar 

我很熟悉Java-Perl正则expression式的语法。 不幸的是,发现只支持emacs和posix语法。

即使在查看emacs语法后,我也无法获得基本的匹配。

 find . -regex "^[[:digit:]]+" -- matches nothing find . -regex "^[[:digit:]]+.*(ALPHA\|BETA)\.jar" -- matches nothing 

例如,在Java和Perl中这很简单:

 ls | grep -P "^\d+.*(ALPHA|BETA)\.jar" 

作品。

将这些文件与posix-awk或posix-extended regxtype匹配的正则expression式是:

 find . -regextype posix-awk -regex ".*/[[:digit:]]+-[[:digit:]]+-[A-Z0-9]+-[A-Z0-9]+-(ALPHA|BETA)\.jar" 

因为find -regex确实匹配,而不是search

你可以用-regextype指定regextypes。 请参阅查找实现的联机帮助页,以检查支持哪些正则expression式引擎。

示例(无论目录深度如何都可以获取文件):

 root@smgw:/tmp# ls -1 4702011-10-21CR719557-R85262-ALPHA.jar 4702011-10-21CR719557-R85262-BETA.jar one root@smgw:/tmp# find . -regextype posix-awk -regex ".*/[[:digit:]]+-[[:digit:]]+-[A-Z0-9]+-[A-Z0-9]+-(ALPHA|BETA)\.jar" ./4702011-10-21CR719557-R85262-ALPHA.jar ./4702011-10-21CR719557-R85262-BETA.jar 

移动jar子,确保他们仍然返回

用abspathsearch它们

 root@smgw:/tmp# find /tmp -regextype posix-awk -regex ".*/[[:digit:]]+-[[:digit:]]+-[A-Z0-9]+-[A-Z0-9]+-(ALPHA|BETA)\.jar" /tmp/4702011-10-21CR719557-R85262-ALPHA.jar /tmp/4702011-10-21CR719557-R85262-BETA.jar 

修改深度:

 root@smgw:/tmp# mkdir -px/y/z root@smgw:/tmp# cp *^C root@smgw:/tmp# mv *.jar x/y/z/ root@smgw:/tmp# find /tmp -regextype posix-awk -regex ".*/[[:digit:]]+-[[:digit:]]+-[A-Z0-9]+-[A-Z0-9]+-(ALPHA|BETA)\.jar" /tmp/x/y/z/4702011-10-21CR719557-R85262-ALPHA.jar /tmp/x/y/z/4702011-10-21CR719557-R85262-BETA.jar 

使用emacs风格来匹配你的模式的正则expression式可能是:

 ".*/[0-9]+-[0-9]+-[0-9A-Z]+-[0-9A-Z]+-\(ALPHA\|BETA\)\.jar$" 

以下是我做的一个简单的testing:

 abarbosa@SPF-157:~/Temp/test$ ls -1 4702011-10-21CR719557-R85262-ALPHA.jar 4702011-10-21CR719557-R85262-BETA.jar whatever.jar abarbosa@SPF-157:~/Temp/test$ find . -regex ".*/[0-9]+-[0-9]+-[0-9A-Z]+-[0-9A-Z]+-\(ALPHA\|BETA\)\.jar$" ./4702011-10-21CR719557-R85262-BETA.jar ./4702011-10-21CR719557-R85262-ALPHA.jar 

据这man find ,这是一条全path的匹配,而不是search。 所以,你必须使用这样的东西:

 $ find . -regex .*/[0-9]+.*\.jar 

您还可以使用-regextype选项将正则expression式types更改为posix-awk,posix-basic,posix-extended …。