我的文件名以yyyymmdd结尾,例如:myFile.20090601,myFile20090708等
我想在2009年6月8日至7月7日的所有文件中找到一个模式,即:20090609到20090707
如何一次性完成正则表达式?
我试过了:
grep 'myPattern' *20090(6(09|[1-3][0-9])|70[1-7])
答案 0 :(得分:4)
20090(6(09|[1-3][0-9])|70[1-7])$
或
20090(6(0[89]|[1-3][0-9])|70[1-7])$
取决于你是指7月8日还是9日(你的问题似乎与此相矛盾)。
答案 1 :(得分:2)
grep 'myPattern' `ls | grep -E "20090(6(09|[1-3][0-9])|70[1-7])"`
这大致如下。获取当前目录(ls
)中的文件列表,使用日期正则表达式(ls | grep ...
)对其进行过滤,然后使用您的模式在生成的文件列表上执行grep搜索({ {1}})。 grep 'myPattern' ...
周围的反向标记执行命令的该部分,并将该命令的输出替换为周围的命令。因此,如果它产生类似“ls | grep ...
”的输出,那么它将产生类似file1 file2 file3
的命令。
答案 2 :(得分:1)
我建议使用带有3个参数的perl / python脚本(或任何其他脚本语言):
它会:
答案 3 :(得分:0)
有效日期的范围是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