Grep匹配特定时间

时间:2013-09-29 22:20:23

标签: regex grep

我的file.txt行的格式为HH:MM:SS

00:05:50
01:40:10
00:23:09
00:34:02

我想打印显示时间在30分钟到1小时20分钟之间的行。

这是我的尝试:

LINES=`grep '(00:[3-5][0-9]:[0-5][0-9]|01:[01][0-9]:[0-5][0-9]|01:20:00)' file.txt`
echo "$LINES"

然而,这显示没有结果。我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

另一种选择,使用awk

LINES=`awk '{ if ( $0 >= "00:30:00" && $0 <= "01:20:00") print $0 }' file.txt`

这是有效的,因为固定格式的24小时也遵循ASCII中的词法顺序。

或更短,正如@Kent慷慨地建议:

LINES=`awk '$0 >= "00:30:00" && $0 <= "01:20:00"' file.txt`

答案 1 :(得分:0)

尝试以下

   LINES=`egrep  '(00:[3-5][0-9]:[0-5][0-9])|(01:[01][0-9]:[0-5][0-9]|01:20:00)' file.txt`

答案 2 :(得分:0)

另一个选项。将文件内容转换为分钟,并逐行比较以分钟为单位提供的界限

awk -F: -v ll=30 -v ul=80 '{minutes=60*$1 + $2 + $3/60}; 
     minutes >= ll && minutes <= ul' file.txt