我有以下日志文件,我想用 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