Regex bash中的正则表达式量词——简单匹配与扩展匹配{n}次

Regex bash中的正则表达式量词——简单匹配与扩展匹配{n}次,regex,bash,filenames,quantifiers,Regex,Bash,Filenames,Quantifiers,我正在使用bashshell并尝试列出目录中名称与regex模式匹配的文件。其中一些模式有效,而另一些模式无效。例如,*通配符可以: $ls FILE_* FILE_123.txt FILE_2345.txt FILE_789.txt 范围模式捕获了其中的前两个,如下所示: $ls FILE_[1-3]*.txt FILE_123.txt FILE_2345.txt 但不是像预期的那样,在“文件”之后带有“7”字符的文件名。伟大的但现在我想数数数字: $ls FILE_[0-

我正在使用bashshell并尝试列出目录中名称与regex模式匹配的文件。其中一些模式有效,而另一些模式无效。例如,*通配符可以:

$ls FILE_*
FILE_123.txt    FILE_2345.txt   FILE_789.txt
范围模式捕获了其中的前两个,如下所示:

$ls FILE_[1-3]*.txt
FILE_123.txt    FILE_2345.txt
但不是像预期的那样,在“文件”之后带有“7”字符的文件名。伟大的但现在我想数数数字:

$ls FILE_[0-9]{3}.txt 
ls: FILE_[0-9]{3}.txt: No such file or directory

这不应该给我在
“FILE”
(即
FILE\u 123.txt
FILE\u 789.txt
,而不是
FILE\u 2345.txt
)后面有三个数字的文件名吗有人能告诉我应该如何使用{n}量词(即“匹配此模式n次”)?

ls
全局模式一起使用
,您不能使用
{3}
。您必须使用
文件[0-9][0-9][0-9].txt
。或者,您可以使用以下命令

ls | grep -E "FILE_[0-9]{3}.txt"
编辑:

或者,您也可以使用
find
命令

find . -regextype egrep -regex '.*/FILE_[0-9]{3}\.txt'
需要使用
*/
前缀来匹配完整路径。在Mac OS X上:

find -E . -regex ".*/FILE_[0-9]{3}\.txt"

Bash不使用正则表达式。它使用glob,这是明显不同的,您正在尝试使用
文件{[0-9]{3}.txt
进行文件扩展。即使是
Bash
的特性也没有与正则表达式的
{N}
等价的特性,因此,正如前面提到的,您必须使用
文件{0-9][0-9][0-9].txt

顺便说一句:!=使用shell,您必须编写
文件[0-9][0-9][0-9].txt
如果它在这种情况下或对将来遇到这个问题的任何人有用,
find-regextype gnu awk-regex./FILE[0-9]{3}.txt
也会得到同样的结果。