[英]regex quantifiers in bash --simple vs extended matching {n} times
我正在使用 bash shell 并尝试列出名称与正则表达式模式匹配的目录中的文件。 其中一些模式有效,而另一些则无效。 例如, * 通配符就可以:
$ls FILE_*
FILE_123.txt FILE_2345.txt FILE_789.txt
范围模式使用以下内容捕获其中的前两个:
$ls FILE_[1-3]*.txt
FILE_123.txt FILE_2345.txt
但不是像预期的那样在“FILE_”之后带有“7”字符的文件名。 伟大的。 但现在我想计算数字:
$ls FILE_[0-9]{3}.txt
ls: FILE_[0-9]{3}.txt: No such file or directory
这不应该给我在"FILE_"
之后的三个数字的文件名(即FILE_123.txt
和FILE_789.txt
,但不是FILE_2345.txt
)有人可以告诉我我应该如何使用 {n} 量词(即“匹配这种模式n次)?
ls
与glob pattern
一起使用,您不能使用{3}
。 你必须使用FILE_[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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.