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]*"
^
第四个括号错了