如何使用 grep 进行数小时的过滤?

如何使用 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        

答案1

您可以使用正则表达式 -在这里玩

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

如果不想包含从 或之后的条目19:00,则更x[1] <= 19改为x[1] < 19

如果你想要包含来自 的条目19:00:00,但不包含更晚的条目,则将条件更改为:

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

答案2

不是 grep,但意思很清楚

awk -F'[ :]+' '7 <= $4 && $4 <= 19' file

相关内容