установка переменной из строки в файле с использованием sed и регулярного выражения

Ух ты, я думаю, вы заметили эффект от функции малых очередей TCP. В пределах одной машины небольшие очереди TCP ограничат пакеты, поставленные в очередь в qdiscs и буферах устройств, до 128 КБ по умолчанию.

TCP будет регулироваться при достижении этого предела без фактического переполнения каких-либо буферов.

Это говорит о том, что для получения дропов вам нужно соединить 3 ВМ (, то есть отдельные эмулированные ядра )вместе -отправителя, «маршрутизатора» и получателя.

Я смутно припоминаю, что могут быть причины для использования отдельных компьютеров/ВМ при использовании netemдля имитации задержки или ограниченной пропускной способности. Кажется, что это хорошая практика в целом.

1
13.09.2019, 20:30
1 ответ

Я нашел причину, по которой это не работает, а также решение. Как прокомментировал @eike в моем OP, проблема заключалась в том, что возврат каретки \r из DOS перезаписывал вывод. Для меня более проблематично то, что \r по какой-то причине был добавлен к моей переменной.

Удаление \r вручную не представлялось возможным, поскольку этот файл регулярно обновляется.

Немного поискав, я обнаружил, что это решает мою проблему и правильно распечатывает строку:

#!/bin/bash
version=$(sed 's/\r$//' test.txt | sed -ne "s/\\Version *: *\([0-9a-zA-Z\.\-]+\)*/\1/p")
printf 'detected version %s for test.txt\n' "$version"

Здесь он сначала удаляет \r из текста и передает его в часть регулярного выражения. и я получаю ожидаемый результат:

detected version 0.6 for test.txt

Я уверен, что есть способ сделать это из регулярного выражения, чтобы игнорировать \r, но это, по крайней мере, сделало работу!

1
27.01.2020, 23:40

Теги

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