我试图用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 …。