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:00tố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 -nlà để ngăn chặn hành động mặc định của in mỗi dòng.
Dec 5 11:00và Dec 5 12:00, phải không? Nếu Dec 5 10:59ngay lập tức theo sau Dec 5 11:01, thì sedsẽ 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, sedsẽ không biết được nơi để dừng lại.
:00phầ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.
egreploại bỏ các giá trị bắt đầu với08hoặc09(ví dụ, thời gian giữa08:00và09:59), và một trong những thứ hai cho phép17:10,17:20,17:30, vv ..., để có được thông qua.