Linux
如何用 grep 過濾幾個小時?
我有以下日誌文件,我想用 grep 剪切文件,但我只列出了從 7 小時到 19 小時發生的內容。
Oct 11 05:26:56 cuervo sshd[983]: Server listening on :: port 22. Oct 11 06:26:56 cuervo sshd[983]: Server listening on :: port 22. Oct 11 07:26:56 cuervo sshd[983]: Server listening on :: port 22. Oct 11 08:26:56 cuervo sshd[983]: Server listening on :: port 22. Oct 11 09:26:56 cuervo sshd[983]: Server listening on :: port 22. Oct 11 19:40:38 cuervo polkitd[623]: Loading rules from directory Oct 11 20:40:38 cuervo polkitd[623]: Loading rules from directory
你可以使用正則表達式 -在這裡玩:
grep -E '^ [^ ]+ [0-9]+ (0[7-9]|1[0-9])'
這將匹配任何月份、任何日期和 07 - 19 小時…這樣的數字匹配在 grep 中並不理想…因為正則表達式不是很好的數字比較…
你可以使用 awk:
awk '{split($3,x,":"); if ((x[1] >= 7) && (x[1] <= 19)){ print }}'
- 用冒號 ( ) 分割第三個欄位(即:時間)
:
,並儲存在名為的數組中x
- 僅當 (hours)的第一個元素介於和之間時才列印該行
x``7``19
如果您不想包含 at 或之後的條目
19:00
,請更改x[1] <= 19
為x[1] < 19
.如果您確實想包含來自 的條目
19:00:00
,但不能在以後包含,則將條件更改為:( ((x[1] >= 7) && (x[1] < 19)) || ($3 == "19:00:00") )