Таким образом, открывание файла с помощью 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
Что мне нужно сделать, это выяснить, сколько раз определенный узел останавливался (на что указывает часть перед каждым двоеточием после «остановленного»). Если я просто grep для этого (то есть 20 :), он может вернуть строки, которые имеют мягкие сбои, но нет остановок, что не помогает мне. Мне нужно отфильтровать только остановленную часть, чтобы я мог найти конкретный узел из тех, которые остановились.
По сути, это система freebsd со стандартными утилитами ядра GNU, но я не могу установить ничего, чтобы помочь.
sedрешение и не обрабатывайте пробелы специально.