我是一名新的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!
答案 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!
它没有超过那个"。您只需学习我提供给您的链接并开始进行实验。
如您所见:您可以使用模式