首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日志中日期范围之间的grep

日志中日期范围之间的grep
EN

Stack Overflow用户
提问于 2012-11-22 03:43:48
回答 5查看 8.2K关注 0票数 7

我正在尝试grep两个日期范围之间的所有行,其中日期的格式如下: date_time.strftime("%Y%m%d%H%M"),因此假设介于201211150821 - 201211150824之间

我正在尝试编写一个脚本,其中包括查找这些日期之间的行:

代码语言:javascript
复制
cat <somepattern>*.log | **grep [201211150821 -  201211150824]** 

我正在尝试找出unix中是否存在可以查找日期范围的内容。

我可以将日志中的日期转换为(从纪元开始),然后使用带有time1 - time2的常规grep,但这意味着读取每一行,提取时间值,然后转换它等等。

可能已经存在一些简单的东西,所以我可以指定日期/时间戳范围,就像向grep提供数字范围一样?

谢谢!

附言:我也可以传入类似2012111511(27|28|29|3-5)的模式,但这是我想要的特定范围,而且每次尝试不同的日期会很乏味,而且在运行时会变得更加棘手。

EN

回答 5

Stack Overflow用户

发布于 2012-11-22 04:02:40

使用awk。假设行中的第一个令牌是时间戳:

代码语言:javascript
复制
awk '
BEGIN { first=ARGV[1]; last=ARGV[2]; }
$1 > first && $1 < last { print; }
' 201211150821 201211150824
票数 2
EN

Stack Overflow用户

发布于 2012-11-22 04:09:33

Perl解决方案:

代码语言:javascript
复制
perl -wne 'print if m/(?<!\d)(20\d{8})(?!\d)/
                      && $1 >= 201211150821 && $1 <= 201211150824'

(它查找以20开头的第一个十位整数,如果该整数在您感兴趣的范围内,则打印该行。如果它没有找到任何这样的整数,它会跳过该行。您可以对正则表达式进行调整,使其对有效月份和时间等有更多的限制。)

票数 2
EN

Stack Overflow用户

发布于 2012-11-22 04:30:20

您正在寻找有点晦涩的'csplit‘(上下文拆分)命令:

csplit '%201211150821%‘'/201211150824/’文件

将从文件中分离出第一个和第二个regexp之间的所有行。如果您的文件是按日期排序的(您说过您正在整理日志),那么它可能是最快和最短的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13500902

复制
相关文章

相似问题

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