2016-11-09 141 views
-1

我想看到使用下面的命令至15:00之间所有条目进入到15:45 11月9日以显示两个时间之间的数据:如何使用grep命令

grep -E "Nov 9 15:00|Nov 9 15:45" /mac1/user1log 

但是这并不表明15:00至15:45,但只有15:00和15:45

我知道awk是更好的,但我需要运行这个从bash脚本和awk不能从bash脚本运行!

+2

是什么让你觉得'awk'不能从bash脚本运行? – RJHunter

+1

该文件是按日期排序还是随机排列的?你可以给例子输入和期望的输出? – dawg

+0

@RJHunter,因为我试图从bash脚本运行它,但它没有运行,我对'awk'不是很熟悉。 –

回答

0

为了实现你正在尝试使用grep(更具体地说,扩展正则表达式选项),你需要提供一个正则表达式。正则表达式有一定的局限性,但对于这种特定的场景,我想出了一个简单的答案。

bash>grep -E "Nov 9 15:[0123][0-9]|Nov 9 15:[4][0-5]" testFile 

TESTFILE的内容如下:

Nov 9 15:02 
Nov 9 15:01 
Nov 9 15:09 
Nov 9 15:39 
Nov 9 15:49 
Nov 9 15:59 

但是,这应该可以正常工作了你提出的情况。

bash>grep -E "Nov 9 15:[0123][0-9]|Nov 9 15:[4][0-5]" testFile 
Nov 9 15:02 
Nov 9 15:01 
Nov 9 15:09 
Nov 9 15:39 

表达式的第一部分与从11月9日15时00什么15时39分和所述第二部分从11月9日15点40匹配任何到15:45。

编辑:它的语法部分只是标准的正则表达式数值范围。 [0-9]意味着它将匹配任何包含0,1,2或3的任何其他数字,然后是来自0-9(01,02,03,39等)的任何其他数字,而[4] [0-5 ]匹配4,然后是0到5之间的任何数字。

+0

非常感谢!语法,所以我知道它是如何工作的? –

+0

我已经编辑了包含快速解释的答案。我可以推荐阅读http://www.regular-expressions.info/quickstart.html? –

+0

可以简化为'grep -E'Nov 9 15:([0-3] [0-9] | [4] [0-5])'' – Sundeep