Regex для sed для захвата нескольких строк или лучшего пути?

Большой поклонник телефона с камерой за последние несколько лет для документирования световых сигналов консолей/ошибки на переключателях/серверах. Мой новый любимый инструмент для переноса в моем рюкзаке является ЗЕРКАЛЬНО ОТРАЖЕННОЙ камерой. Я нахожу это очень полезным для документирования проводных стоек/лотков или шкафов удаленного техобслуживания, из которых у меня должно быть 'представление' с моего стола в то время как по телефону с технологией. Плюс, замечательно к документу, когда кто-то в офисе сходит с ума.

5
задан 25 September 2011 в 02:16
3 ответа

Сначала используйте флаг '-n' для подавить автоматический вывод. Затем используйте sed адреса , чтобы процитировать интересующую вас часть (от тире «---» до строки со словом «Disconnected»). Наконец, распечатайте пространство шаблонов (все пространство шаблонов, поскольку вас интересует все, что внутри него).

~$ sed -n '/^---*/,/Disconnected/{p}' inputfile

Отредактировано из-за запроса LF4 об удалении строки с дефисами из результата.

В «адресах» вы указываете отдельные пространства шаблонов. Таким образом, вы можете делать все, что захотите, с этими отдельными пространствами шаблонов. В том числе удалить строки по регулярному выражению. В этом примере команда удаляет линии, образованные дефисами, из пространства шаблона, что дает результат, который вы

5
ответ дан 3 December 2019 в 01:10

sed может искать шаблон в нескольких строках, объединяя их в которые называется «удерживаемым пространством», примерно так:

$ sed -n '1h;1!H;${;g;s/.*\(-\{80\}.*Disconnected\).*/\1/p;}' file
  • 1h : скопировать первую строку для удержания пробела
  • 1! H : со второй строки добавить, чтобы удерживать пробел
  • $ : последняя строка
  • g : скопировать удерживаемое пространство в буфер шаблона
  • s / pattern / substitution / : поиск и замена
  • \ 1 : обратная ссылка на группу в шаблоне
  • p : print
4
ответ дан 3 December 2019 в 01:10

Самый простой, но не очень эффективный способ -

  1. Используйте tr, чтобы удалить все символы новой строки.

     tr '\ n' ''
    
  2. Повторно добавить новые строки после Disconnected с помощью команды sed \ a .

  3. Проанализируйте эти данные с помощью команды sed .
1
ответ дан 3 December 2019 в 01:10

Теги

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