我有一堆文件名为"Logger.2018-08-04_23:59:59.csv“,我想一次将其中一堆文件重新分配,但只在特定的日期范围内,例如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
这是可行的,但有更好的方法来延长日期范围,这样我就不必每次需要增加第一个数字时都要添加文件块了吗?
发布于 2018-08-22 22:18:48
您可以使用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我发现网站regex101对玩和学习regex很有价值。
发布于 2018-08-22 21:29:49
你有“扩展模式匹配”的bash
吗?试一试
shopt -s extglob
ls -la Logger.2018-08-@(0[4-9]|1[0-7])*.csv
https://unix.stackexchange.com/questions/464240
复制相似问题