如果我有这样的目录结构
yyyy/dd/mm/<files>
有没有办法使用正则表达式在给定时间范围内grep所有文件中的字符串?例如,我有一个时间框架:2010/12/25 – 2011/01/01,我需要grep对应于日期从12月25日到1月1日的目录中的所有文件
如果我以编程方式执行此操作,是否最好在每个yyyy / dd / mm目录中迭代日期范围和grep文件,而不是使用正则表达式执行此操作?或者它不会有所作为?
在你的情况下,它很简单:
\b(?:2010/12/(?:3[01]|2[5-9])|2011/01/01)\b
将匹配包含您指定范围内的日期的字符串.但一般来说,正则表达式不适合匹配日期范围.它总是有可能,但很少是一个好的.
例如,对于2003/04 / 25-2011 / 04/04的范围,你得到
\b(?: 2003/04/(?:30|2[5-9])| 2003/(?:(?:0[69]|11)/(?:30|[12][0-9]|0[1-9])|(?:0[578]|1[02])/(?:3[01]|[12][0-9]|0[1-9]))| 2011/04/0[1-4]|2011/(?:02/(?:[12][0-9]|0[1-9])|0[13]/(?:3[01]|[12][0-9]|0[1-9]))| (?:2010|200[4-9])/(?:02/(?:[12][0-9]|0[1-9])|(?:0[469]|11)/(?:30|[12][0-9]|0[1-9])|(?:0[13578]|1[02])/(?:3[01]|[12][0-9]|0[1-9])) )\b
如果我不得不做这样的事情(并且不能在文件属性中使用创建日期),我会使用RegexMagic(创建日期范围正则表达式)和PowerGREP(进行grepping)如果它是一次性的工作,但这些仅适用于Windows.如果我不得不经常这样做,我会编写一个小的Python脚本,遍历我的目录树,解析每个目录的日期,检查它是否在范围内,然后查看该目录中的文件.