[英]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脚本(或任何其他脚本语言):
它会 :
有效日期范围是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.