如何使用grep查找时间范围内的数据?

时间:2016-11-06 19:42:34

标签: linux bash shell grep

我是一名新的bash脚本学生。我正在学习grep!我有一个文件,其中包含有关计算机或活动的信息。我正在尝试使用grep命令在特定时间范围内查找有关我的计算机的信息。我尝试过以下命令,但有些工作,有些则没有:

grep -E "Jan 09 22:00:00 && Jan 09 22:05:00" /etc/active #doesn't work
grep -E "Jan 09 22:00:00" && "Jan 09 22:05:00" /etc/active #doesn't work

然后我尝试了管道

grep -E "Jan 09 22:00:00" | grep -E "Jan 09 22:05:00" /etc/active #doesn't work

如果我尝试grep -E "Jan 09 22:00" /etc/active这项工作,但这只是一次。我想在两个不同的时间之间

我知道有一个命令awk,但我们还没有开始使用awk!

1 个答案:

答案 0 :(得分:1)

我认为你所要求的只是用grep做得不好。你看,grep是关于模式的文本匹配。

grep不了解" date&#34 ;;或日期的语义。 grep并不明白" Jan 09 22:00:00"表示一个时间点;并且您正在寻找接下来5分钟的参赛作品。

您唯一可以做的事情是:使用与该输入匹配的模式

例如:模式

 Jan 09 22:0.:..

应匹配22.00.00至22.09.59之间的任何时间戳

换句话说:您可以研究如何创建更复杂的模式(有关一些想法,请参阅here);然后尝试找到与您需要的完全匹配的模式。但请理解,根据您的要求,这可能很难。

回到我的初衷:grep是一个可以做的工具"愚蠢的"文字匹配。您正在寻找适用于更高抽象级别的东西"。

编辑:我其实真的告诉过你需要知道什么,但也许你需要一个例子。所以我发了一个文件forgrep并把它放在

Jan 09 22:00:00 zero
Jan 09 22:01:00 one
Jan 09 22:02:00 two
Jan 09 22:03:00 three

查看使用不同正则表达式的可能性:

grep -E "Jan 09 22:01:00" forgrep 
Jan 09 22:01:00 one

以上内容与提供的完全字符串相匹配,但

grep -E "Jan 09 22:0.:00" forgrep 
Jan 09 22:00:00 zero
Jan 09 22:01:00 one
Jan 09 22:02:00 two
Jan 09 22:03:00 three

只需匹配任何号码(因为

grep -E "Jan 09 22:0[12]:00" forgrep 
Jan 09 22:01:00 one
Jan 09 22:02:00 two

匹配那个地方的数字1和2!

它没有超过那个"。您只需学习我提供给您的链接并开始进行实验。

如您所见:您可以使用模式