Tôi muốn để có thể sử dụng một 'grep' hoặc 'pcregrep -M' như giải pháp mà phân tích một file bản ghi phù hợp với các thông số sau:Phân tích một file log multiline chiều dài thay đổi
- Mỗi mục nhật ký có thể nhiều dòng dài
- dòng đầu tiên của entry bản ghi có chìa khóa mà tôi muốn tìm kiếm
- Mỗi phím xuất hiện trên hơn sau đó một dòng
vì vậy, trong ví dụ dưới đây tôi sẽ muốn quay trở lại mỗi dòng mà h như KEY1 trên nó và tất cả các dòng hỗ trợ bên dưới nó cho đến khi thông điệp tường trình tiếp theo.
Log file: 01 Feb 2010 - 10:39:01.755, DEBUG - KEY1:randomtext blah blah2 T blah3 T blah4 F blah5 F blah6 blah7 01 Feb 2010 - 10:39:01.757, DEBUG - KEY1:somethngelse 01 Feb 2010 - 10:39:01.758, DEBUG - KEY2:randomtest this is a test 01 Feb 2010 - 10:39:01.760, DEBUG - KEY1:more logs here 01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:eve more here this is another multiline log entry keeps on going but not as long as before 01 Feb 2010 - 10:39:01.763, DEBUG - KEY2:testing test test test end of key2 01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:but key 1 is still going and going and going and going and going and going and going and going and going and going and going and going and going okay enough 01 Feb 2010 - 10:39:01.762, DEBUG - KEY3:and so on and on
Desired output of searching for KEY1: 01 Feb 2010 - 10:39:01.755, DEBUG - KEY1:randomtext blah blah2 T blah3 T blah4 F blah5 F blah6 blah7 01 Feb 2010 - 10:39:01.757, DEBUG - KEY1:somethngelse 01 Feb 2010 - 10:39:01.760, DEBUG - KEY1:more logs here 01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:eve more here this is another multiline log entry keeps on going but not as long as before 01 Feb 2010 - 10:39:01.762, DEBUG - KEY1:but key 1 is still going and going and going and going and going and going and going and going and going and going and going and going and going okay enough
Tôi đã cố gắng để làm một cái gì đó như: '(. * \ N) key1 +'
pcregrep -M logfile
nhưng chắc chắn không hoạt động đúng.
Điều gì định nghĩa kết thúc của một mục nhập? Có đảm bảo rằng các dòng trong một mục nhập sẽ không bắt đầu bằng một chữ số, nhưng một dòng xác định một mục mới sẽ? –
Điều này có thể dễ dàng hơn bằng cách sử dụng một tập lệnh nhỏ chứ không phải là một regex. Có lý do nào để không làm điều đó không? –