使用正则表达式量词查找命令,例如{1,2}


14

我一直试图创建一个find命令字符串,该字符串将查找所有以数字1-99结尾但排除所有其他文件的文件。

例如,我想找到myfile1 myfile99而不是myfile456而不是myfilebackup

我在想的正则表达式是,myfile[1-9]{1,2}但是我无法将它与find一起使用。

find . -regex '.*myfile[0-9]{1,2}' 要么 find . -iname 'myfile[0-9]{1,2}'

从我可以看到的那{1,2}部分是不起作用的。

(顺便问一下,您可以-name -regex互换使用吗?)

任何帮助表示赞赏。


1
-iname(和-name)使用不具有此语法的globs
l0b0 2013年

Answers:


10

你可以试试

find . -regex '.*myfile[0-9][0-9]?'

要么

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

谢谢-第一行对我有用。我曾用-iname尝试过此操作,但我不认为它支持语法,否则我做错了事。
Lukas88

17

如果您有GNU find,则可以使用其他正则表达式类型:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

根据GNU的说法,默认情况下find使用绝望的 Emacs正则表达式语法 -Emacs支持\{from,to\}语法,但至少GNU find不支持该语法。

奇怪的是,参考手册没有包含有关sed正则表达式语法的部分,因此谁知道它的哪些部分受支持。


1
seded似乎是一个别名posix-basic,所以应该与POSIX兼容BRE(虽然支持一些类似的扩展\+)。它与GNU不兼容,sed例如,它[\n]匹配换行符而不是反斜杠,或者n是POSIX要求的。又见-regextype posix-extended了POSIX ERES(所以.*myfile[0-9]{1,2}),也有类似的扩展\s\<
斯特凡Chazelas

我从不知道-regextype。看来,如果使用-regextype egrep它,似乎可以避免反斜杠。
Sridhar Sarnobat,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.