正则表达式与 find 一起使用时遇到问题

正则表达式与 find 一起使用时遇到问题

find我在使用正则表达式标志时遇到很多麻烦。我egrep单独使用它来查找文件中的日期模式,如下所示:

egrep '[0-9]{4}-[0-9]{2}-[0-9]{2}' 

它将返回格式为 CCYY-MM-DD 的日期。我正在尝试将相同的模式与find.我努力了:

find . -regextype egrep -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"
find . -type f -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"

试图反斜杠大括号......

find . -type f -regextype egrep -regex "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"

所有这些似乎都没有返回任何东西。我没有收到错误消息,没有输出...我什至尝试将输出重定向到文件,但什么也没有...

很难找到有关使用find正则表达式的优质资源。如果有人可以提供帮助,我将不胜感激。我不反对任何类型的正则表达式find支持,尽管我喜欢,egrep因为-o仅返回匹配项而不是整行的标志。但实际上我只需要find找到目录中文件名中与上述模式匹配的所有文件。

答案1

您的示例混合了单引号和双引号。 find 需要一个与整个文件名匹配的模式,因此您希望以“*”开始/结束模式。

这将找到具有您描述的模式的所有文件:

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"

但如果你想使用regextype,你需要“posix-egrep”,并仔细注意regex需要匹配整个路径,

find yourpath -regextype posix-egrep  -regex ".*[0-9]{4}-[0-9]{2}-[0-9]{2}.*"

答案2

第一个例子应该是:

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"
                               ^

第四个括号错了

相关内容