Как подключить гостя к интерфейсу `tun `

В приведенных ответах я вижу циклы или переходы к другим инструментам, и мне это не нравится, если в этом нет необходимости. Мне нравится один -вкладыш:

sed -E '/^[0-9:.]+$/{x;G;s/(.*)\n(.*)\n(\n)(.*)/\1 --> \4\3\2\3/p;d;};H;$!d;x'

Но давайте шаг за шагом:

  • Я использую ^[0-9:.]+$как расширенное регулярное выражение для строки метки времени. Этого должно быть достаточно в реальном мире, но вы можете сделать это более точным. Я использую этот шаблон в качестве адреса, поэтому все внутри пары {}выполняется только для строк с метками времени.
  • Очевидно, нам нужно держать все в голове, пока не придет следующая метка времени. Иметь в виду означает добавлять к пространству хранения вsed
  • Таким образом, каждый раз, когда мы встречаем метку времени, мы предполагаем все, поскольку последняя метка времени находится в пространстве хранения. Таким образом, мы добавляем текущую метку времени к Hстарому пробелу и e xменяем шаблон и удерживаем пробел. Таким образом, текущая временная метка уже сохраняется в пространстве хранения для следующего цикла, а все, что нам нужно, находится в пространстве шаблонов
  • .
  • Нам просто нужно реорганизовать его с помощью sзаменить:s/(.*)\n(.*)\n(\n)(.*)/\1 --> \4\3\2\3/--\1начальную метку времени, \2текстовую строку, \3новую строку (нам нужно это в замене, но POSIX не t определите \nвместо ), а \4— отметку времени окончания. Выглядит сложнее, чем есть.
  • Добавление опции pк замене sи последующее dудаление пространства шаблона предохраняет нас от нежелательного вывода для первой строки, когда пространство удержания было пустым.
  • Теперь все, что осталось, это добавить другие строки к старому пространству Hи
  • для последней строки e xснова измените буферы, поэтому строки, собранные в области хранения, будут напечатаны даже без метки времени закрытия

Если кто-то по-прежнему считает sedнеэлегантным, я ничем не могу помочь.

2
22.10.2021, 15:30
0 ответов

Теги

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