Показывать только часть лог-файла в скрипте bash

-1

Журнал OpenVPN выглядит так:

OpenVPN

CLIENT LIST
Updated,Sat Jun 20 04:20:07 2015
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
[ A .... ]
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
[ B.... ]
GLOBAL STATS
Max bcast/mcast queue length,33
END

куда а также В выше перечислены хосты, отформатированные определенным образом.

У меня есть сценарий bash, который я буду использовать для обработки элементов в части, называемой «ROUTING TABLE» ( В ). Как мне эффективно отделить этот список хостов от остальной части документа в моем сценарии?

Lennart Rolland
источник

Ответы:

1

Вы можете использовать СЕПГ удалить (d) строки из строки 1 до соответствующей стартовой строки. Затем удалите строки из соответствующей конечной строки до последней строки ($). Вы, вероятно, также хотите удалить строку заголовка «Виртуальный адрес». Все, что осталось, это то, что вы хотите!

sed '1,/^ROUTING TABLE/d
     /^Virtual Address,/d
     /^GLOBAL STATS/,$d'
meuh
источник
Это имело для меня самое большое значение, так что вы получите голос.
Lennart Rolland
1

Следующие СЕПГ команда

      sed -n '/ROUTING/,/\[ B/{p}' filename

делает то, что вы хотите: -n подавляет поведение по умолчанию, которое заключается в печати каждой строки, выражение между одинарными кавычками выбирает диапазон строк, а затем печатает их (в этом смысл {п} ). Выбираемые диапазоны определяются с помощью совпадений (начального и конечного), разделенных сепаратрисами, в моем случае я использую косую черту / как сепаратриса; начальное и конечное совпадение с образцом должны быть разделены запятой, и \ [ используется, чтобы подчеркнуть буквальное значение квадратных скобок, то есть это не грамматическая структура, а настоящая открывающая квадратная скобка, которую нужно найти.

MariusMatutiae
источник