Regex 查找数值大于指定数字的文件

Regex 查找数值大于指定数字的文件,regex,find,ls,Regex,Find,Ls,当我运行以下命令时,我会得到一个文件列表 find . -type f -name '*_duplicate_[0-9]*.txt' ./prefix_duplicate_001.txt ./prefix_duplicate_002.txt ./prefix_duplicate_003.txt ./prefix_duplicate_004.txt ./prefix_duplicate_005.txt 现在我只对数字大于或等于003的文件感兴趣。我怎样才能做到这一点 先谢谢你

当我运行以下命令时,我会得到一个文件列表

find . -type f -name '*_duplicate_[0-9]*.txt'

./prefix_duplicate_001.txt 

./prefix_duplicate_002.txt 

./prefix_duplicate_003.txt 

./prefix_duplicate_004.txt 

./prefix_duplicate_005.txt
现在我只对数字大于或等于003的文件感兴趣。我怎样才能做到这一点

先谢谢你

00[3-9]|(([1-9]\\d\\d)|(\\d[1-9]\\d))

仅适用于数字部分。

使用
查找
中的
-regex
选项,您可以调整regex,以获取所有在
\u duplicate\u
后具有
3
或更高值且前导为零的文件:

find . -regextype posix-extended -type f \
       -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt'
在OSX上使用此
查找

find -E . -type f -regex '.*_duplicate_0*([3-9]|[1-9][0-9])[0-9]*\.txt'

./prefix_duplicate_003.txt
./prefix_duplicate_004.txt
./prefix_duplicate_005.txt
使用此模式

.*_duplicate_(?!00[1-2])\d{3}\.txt

尽管我喜欢在可能的情况下使用单个命令,但我认为这可能是您在这里需要的:

find . -type f -name '*_duplicate_[0-9]*.mat' | awk -F '[_.]' '$4 > 3 { print $0 }'
这方面有很多变化,例如:

find . -type f -name "*.mat" | awk -F '[_.]' '$0 ~ /_duplicate_[0-9]*.mat/ && $4 > 3 { print $0 }'

但从效率的角度来看,我不确定这是否真的有什么不同…

@anubhava在我的macbook上运行这些命令会给我以下错误“find:-regextype:unknown primary or operator”虽然代码本身就说明了问题,但最好给代码添加一些解释。这会出现在审阅队列中,因为只有代码的答案往往会出现。此外,请使用正确的格式。虽然不禁止只使用代码的答案,但请理解这是一个问答社区,而不是一个众包社区,并且通常,如果OP理解代码作为答案发布,他/她会自己想出类似的解决方案,一开始就不会提出问题。同样的原则也适用于未来可能不熟悉所呈现代码的读者。因此,请通过解释答案和/或代码的工作方式和/或原因,为答案和/或代码提供上下文。