Поиск следующего вхождения шаблона до и после другого сопоставленного шаблона и извлечение всего между ними в другой файл

Возможно, ваш адаптер Wi-Fi -не может изменить свой MAC-адрес. Вы должны проверить, будет ли он отправлять какие-либо пакеты с новым MAC-адресом, используя другой адаптер и программное обеспечение для мониторинга, такое как kismet.

1
11.10.2019, 18:43
1 ответ

Обратите внимание, что стандартные инструменты обработки текста -, такие как sed, perlили awk, не предназначены для синтаксического анализа XML. Если вы можете полагаться на некоторые вещи, такие как не более одной пары <log>...</log>в одной строке, вы можете сделать это с помощьюsed:

sed '/<log>.*<\/log>/{/Failure/p;d;};/<log>/,/<\/log>/H;/<log>/h;/<\/log>/!d;x;/Failure/!d' your.log
  • '/. */' сопоставляет строки с полным тегом. Их нужно обрабатывать отдельно.:/Failure/pпечатает их, если они содержат Failure, dостанавливает дальнейшую обработку.
  • Теперь /<log>/,/<\/log>/выбирает строки между началом <log>и закрытием </log>и добавляет их в область хранения (буфера обменаsed)с помощьюH
  • /<log>/hинициализирует пространство удержания для любой новой logпоследовательности
  • /<\/log>/!dостанавливает обработку всех строк, кроме закрытых</log>
  • Таким образом, следующее выполняется только для закрытия логов:xменяет местами удержание и шаблонное пространство,так что у нас в пространстве шаблонов есть все, что было собрано с последней строки <log>. dудалите его, если он не содержит Failure, иначе он будет напечатан по умолчанию в конце скрипта
1
28.04.2021, 23:28

Теги

Похожие вопросы