Таким чином, відкриття файлу з, catа потім використання grepдля отримання відповідних рядків отримує мене поки що, коли я працюю з конкретним набором журналів, з яким я маю справу. Потрібен спосіб зіставлення ліній за шаблоном, але лише повернення частини рядка після відповідності. Частина до і після матчу постійно змінюватиметься. Я грав з використанням sedабо awk, але не зміг зрозуміти, як відфільтрувати рядок, щоб видалити частину перед матчем, або просто повернути частину після матчу, або буде працювати. Це приклад рядка, який мені потрібно відфільтрувати:
2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
Мені потрібна порція - це все, після того, як "застопорився".
Передумовою цього є те, що я можу дізнатися, як часто щось зупиняється:
cat messages | grep stalled | wc -l
Що мені потрібно зробити - це дізнатися, скільки разів певний вузол застопорився (вказується частиною перед кожною кишкою після "затримки"). Якщо я просто натискаюся на це (тобто 20 :), він може повернути лінії, які мають м'які збої, але немає кіосків, що мені не допомагає. Мені потрібно фільтрувати лише застряглий ділянку, щоб потім я міг простукати за певний вузол із тих, що затрималися.
Для всіх намірів і цілей це система freebsd зі стандартними утилітами GNU, але я не можу встановити нічого додаткового, щоб допомогти.
sedрозчин і не лікуйте пробіл спеціально.