Grep 特定日期范围内 FileName 中包含日期的多个文件

Grep 特定日期范围内 FileName 中包含日期的多个文件

我有一堆文件名类似于“Logger.2018-08-04_23:59:59.csv”的文件,我想一次 grep 一堆它们,但仅限于某个日期范围,例如 8/04-8 /17。我怎样才能做到这一点?

我试过:

grep "string" Logger.2018-08-[04-17]*.csv 

但这显示的是 8/2 的结果,而不是 8/13-8/17 的结果。我可以分两部分来做

grep "string" Logger.2018-08-0[4-9]*.csv Logger.2018.08-1[0-7]*.csv

这确实有效,但是对于更长的日期范围,是否有更好的方法,这样我就不必每次需要增加第一个数字时都不断添加文件块?

答案1

你有bash“扩展模式匹配”吗?尝试

shopt -s extglob
ls -la Logger.2018-08-@(0[4-9]|1[0-7])*.csv 

答案2

您可以结合使用 find 和正则表达式来将候选文件范围缩小到所需的日期范围,然后将结果通过管道传递给 grep。调整括号中包含的正则表达式部分以更改日期范围。例子:

$find . -type f -regextype posix-extended -regex '.*Logger.2018-08-((0[4-9])|(1[0-7])){1}.*' -exec grep -l text '{}' \; | sort -n -t- -k3

./Logger.2018-08-04_23:59:59.csv
./Logger.2018-08-05_23:59:59.csv
./Logger.2018-08-06_23:59:59.csv
./Logger.2018-08-07_23:59:59.csv
./Logger.2018-08-08_23:59:59.csv
./Logger.2018-08-09_23:59:59.csv
./Logger.2018-08-10_23:59:59.csv
./Logger.2018-08-11_23:59:59.csv
./Logger.2018-08-12_23:59:59.csv
./Logger.2018-08-13_23:59:59.csv
./Logger.2018-08-14_23:59:59.csv
./Logger.2018-08-15_23:59:59.csv
./Logger.2018-08-16_23:59:59.csv
./Logger.2018-08-17_23:59:59.csv

在本例中,我使用 grep 的“-l”选项列出结果文件而不是虚拟文本,以表明它确实将 grep 限制为您想要的文件。要实际查看 grep 文本行,请删除“-l”。我还添加了一个额外的管道来排序以使输出漂亮。

PS我已经找到这个网站了正则表达式101对于使用和学习正则表达式很有价值。

相关内容