find和grep中不同的POSIX Basic正则表达式?

时间:2013-10-09 19:11:25

标签: regex grep gnu-coreutils

我需要使用GNU find 命令来查找模式的文件,由POSIX BRE描述如下:

"_[[:digit:]]*.txt"

(下划线后跟任意数字后跟句点后跟“txt”)

当目标文件名放入单个文本文件时,我可以使用上面提到的RE使用 grep 成功选择感兴趣的文件名。但是,使用--regextype posix-basic find 找不到任何匹配项。

E.g:

$ touch 1.txt _2.txt _3_r.txt _3.txt 3.txt
$ for i in $(ls); do echo $i >> files.txt; done
$ grep "_[[:digit:]]*.txt" files.txt
_2.txt
_3.txt
$ find . -regextype posix-basic -regex "_[[:digit:]]*.txt"
$

grep find 是否有不同的POSIX BRE语法?然后,我如何构造RE来选择感兴趣的文件名(示例中为_2.txt和_3.txt)。

2 个答案:

答案 0 :(得分:2)

根据man find的正则表达式部分:

  

这是整个路径上的匹配,而不是搜索。   例如,要匹配名为`./fubar3'的文件,   你可以使用正则表达式`。* bar。'或者`。* b。* 3',但不是`f。* r3'。

答案 1 :(得分:-1)

尝试使用\ d而不是[:digit:]