首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在grep中使用find而不是隔离文件

在grep中使用find而不是隔离文件
EN

Stack Overflow用户
提问于 2021-03-23 18:49:19
回答 2查看 33关注 0票数 1

我有一系列如下所示的文件:

代码语言:javascript
复制
image-seq 2020-04-13-05-50-00.jpg 
image-seq 2020-04-13-06-00-00.jpg
...
image-seq 2020-04-13-16-50-00.jpg
image-seq 2020-04-13-17-00-00.jpg

我尝试用从17:00到第二天05:50的时间来分隔文件(所以应该只返回示例中的第一个和最后一个文件名)。我想我可以使用mv和grep来隔离文件,然后查找它们,但是不应该出现的文件会显示在结果输出中。

我使用的是macOS grep,所以我不确定这是否是问题所在。

我尝试的命令是:

代码语言:javascript
复制
find . -type f -name \*.jpg -exec grep -E '\-1[7-9]|2[0-3]|0[0-5]-\d{2}-\d{2}\.jpg' {} \;

我不确定我做错了什么,但如果你有任何建议,那将是很好的。

EN

回答 2

Stack Overflow用户

发布于 2021-03-23 19:00:24

在macOS find上,您可以使用以下命令通过-E-iregex选项获取匹配的文件:

代码语言:javascript
复制
find -E . -iregex '.*(-1[7-9]|2[0-3]|0[0-5])(-[0-9]{2}){2}\.jpg'

./image-seq 2020-04-13-05-50-00.jpg
./image-seq 2020-04-13-17-00-00.jpg
票数 2
EN

Stack Overflow用户

发布于 2021-03-23 18:59:53

不是使用-exec grep在文件内部搜索,而是使用管道find | grepfind打印的文件名列表中搜索。

然后,您还必须调整正则表达式。使用-a|b|c-,您可以搜索-abc-。您可能指的是搜索-a--b--c--(a|b|c)-

代码语言:javascript
复制
find . -type f -name \*.jpg | grep -E -e'-(1[7-9]|2[0-3]|0[0-5])-..-..\.jpg'

然而,编写用于拟合数字范围的正则表达式既累人又容易出错。正如您可能知道的,上面的regex不会检查分钟数。您可能希望切换到awk

代码语言:javascript
复制
find . -type f -name \*.jpg | awk -F- '$5>=17 || $5<5 || $5==5 && $6<=50'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66761662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档