繁体   English   中英

如何用正则表达式构造它

[英]How to construct this in regular expression

我有以yyyymmdd结尾的文件名,例如:myFile.20090601,myFile20090708等

我想为2009年6月8日至7月7日(即:20090609至20090707)的所有文件中的格式进行grep

我如何一次性进行正则表达式?

我试过了:

grep 'myPattern' *20090(6(09|[1-3][0-9])|70[1-7])
20090(6(09|[1-3][0-9])|70[1-7])$

要么

20090(6(0[89]|[1-3][0-9])|70[1-7])$

取决于您是说7月8日还是9月9日(您的问题在那看来是矛盾的)。

grep 'myPattern' `ls | grep -E "20090(6(09|[1-3][0-9])|70[1-7])"`

这大致如下。 获取当前目录( ls )中的文件列表,使用日期正则表达式( ls | grep ... )进行过滤,然后使用模式在生成的文件列表上执行grep搜索( grep 'myPattern' ... )。 ls | grep ...周围的ls | grep ... ls | grep ...执行命令的该部分,并将该命令的输出替换为周围的命令。 因此,如果生成的输出类似于“ file1 file2 file3 ”,那么它将导致类似grep 'myPattern' file1 file2 file3的命令。

我建议使用3个参数的perl / python脚本(或任何其他脚本语言):

  1. 模式
  2. 开始日期为yyyymmdd
  3. 结束日期为yyyymmdd

它会 :

  1. 解码开始和结束日期。
  2. 循环浏览文件夹中的文件
  3. 解码文件名中的任何日期
  4. 检查是否在日期之间,并grep模式

有效日期范围是6月06–30和7月01–07。 由于天数范围不同,因此我们应该为每个月使用单独的正则表达式。 这些是

/2009 06 (09 | [12][0-9] | 30)/x

(请注意,根据十位数,如何将日期范围划分为个案,因为对于有效的单位位数有不同的条件。)

/2009 07 0[1-7]/x

然后我们可以加入他们

/(2009 06 (09 | [12][0-9] | 30)) | (2009 07 0[1-7])/x

然后排除共同点(可能不是最好的可读性)并添加行尾断言:

/2009 0 (6 (09 | [12][0-9] | 30)) | (7 0[1-7]) $/x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM