Таким образом, открывание файла с помощью 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
решение и не обрабатывайте пробелы специально.