2013-09-29 69 views
0

我有一個file.txt與格式HH:MM:SS線:grep來匹配特定的時間

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" 

然而,這說明沒有結果。我究竟做錯了什麼?

謝謝!

+0

如果加上'-E'後'grep' – beroe

回答

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

爲什麼你寫的東西就像你能解釋一下你的搜索可能工作'(X)|(Y | Z)'而不是'(X | Y | Z)'? –

+0

'()'分隔'egrep'的模式 –

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

+1正則表達式不是這類問題的正確工具。 awk行可寫成'awk'$ 0> =「00:30:00」&& $ 0 <=「01:20:00」'file' – Kent

+0

@Kent是的,謝謝我剛剛發現了!再次感謝。並感謝編輯的清理。 :) – lurker

0

另一個選項。轉換文件內容到分鐘和比較線,由線與分鐘爲單位

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