Linux

如何用 grep 過濾幾個小時?

  • October 17, 2018

我有以下日誌文件,我想用 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] <= 19x[1] < 19.

如果您確實想包含來自 的條目19:00:00,但不能在以後包含,則將條件更改為:

( ((x[1] >= 7) && (x[1] < 19)) || ($3 == "19:00:00") )

引用自:https://serverfault.com/questions/936009