Câu trả lời:
Hãy thử egrep:
pttrn="2014-12-04 0[0-9]"
pttrn="${pttrn}|2014-12-04 1[0-6]"
pttrn="${pttrn}|2014-12-04 17:00:00"
egrep "${pttrn}" <logfile>
Mẫu egrep chứa ba phần. Phần đầu tiên lấy mọi thứ từ 00:00:00 đến 09:59:59. Phần thứ hai lấy mọi thứ từ 10:00:00 đến 16:59:59 và phần thứ ba lấy 17:00:00.
egrep "2014-12-04 (0[0-9]|1[0-6]|17:00:00)"
.
Nếu bạn muốn khoảng thời gian 4 phút của nhật ký,
grep "01/APR/2014:16:3[5-9]" logfile
sẽ trả lại tất cả các dòng nhật ký trong khoảng từ 16:35 đến 16:39 vào ngày 01 tháng 4 năm 2014.
Giả sử bạn cần 5 ngày qua bắt đầu từ ngày 17 tháng 9 năm 2014, bạn có thể sử dụng như sau:
grep "1[3-7]/Sep/2011" logfile
Hy vọng điều này sẽ giúp,
Bạn có thể chọn một dòng bắt đầu và một dòng kết thúc với, vd sed
:
sed -n '/Dec 5 11:00/,/Dec 5 12:00/p' /var/log/daemon.log
Điều này sẽ in tất cả các dòng từ dòng đầu tiên với Dec 5 11:00
tối đa (và bao gồm) dòng đầu tiên với Dec 5 12:00
. Điều này giả sử nhật ký là tuần tự thời gian (tức là tất cả các dòng theo thứ tự thời gian). Các -n
là để ngăn chặn hành động mặc định của in mỗi dòng.
Dec 5 11:00
và Dec 5 12:00
, phải không? Nếu Dec 5 10:59
ngay lập tức theo sau Dec 5 11:01
, thì sed
sẽ không biết bắt đầu từ đâu. Và nếu có một Dec 5 11:00
, nhưng sau đó Dec 5 11:59
được theo sau bởi Dec 5 12:01
, sed
sẽ không biết được nơi để dừng lại.
:00
phần đó, nhưng sau đó một lần nữa sẽ phải có ít nhất một dòng nhật ký mỗi giờ. Cá nhân tôi muốn điều chỉnh kịch bản cho phù hợp với dữ liệu; thậm chí có thể áp dụng một số peroo foo.
egrep
loại bỏ các giá trị bắt đầu với08
hoặc09
(ví dụ, thời gian giữa08:00
và09:59
), và một trong những thứ hai cho phép17:10
,17:20
,17:30
, vv ..., để có được thông qua.