Пара вопросов:
вы смешиваете BRE и ERE (, например \(
против (
для группировки)
ваш .*
в конце должен быть внутри группы захвата, если вы хотите, чтобы результат включал все после IP
^.*
в начале будет жадно потреблять столько символов, сколько сможет -включая все, кроме одной из первых цифр IP
Кроме того, .
не нужно экранировать внутри []
-, хотя это ничего не ломает.
Я не уверен, что это ПРАВИЛЬНЫЙ способ справиться с (3 )в sed
, который (, в отличие от perl
, говорит, что )не имеет не-жадного модификатора. Добавление слова -граничной привязки \b
вроде бы работает, но кажется хрупким
Так что либо (BRE)
sed 's/^.*\(\b\([0-9]\{1,3\}[.]\)\{3\}[0-9]\{1,3\}.*$\)/\1/' <<< "$var"
или (ЭРЭ)
sed -E 's/^.*(\b([0-9]{1,3}[.]){3}[0-9]{1,3}.*$)/\1/' <<< "$var"
Оказывается, NetworkManager пытается управлять и назначать IP-адрес порту сетевого моста veth*
(. Я предполагаю, что это связано с сетевым мостом docker0
).
Все эти veth*
появляются в списке ifconfig
после того, как я вызываю docker run
для запуска контейнера Docker. У них есть другая суффиксная метка, которая является динамической, но их префикс всегда veth*
.
Таким образом, решение состоит в том, чтобы потребовать от Network Manager игнорировать эти порты моста .
Я добавил в /etc/NetworkManager/NetworkManager.conf
эту конфигурацию с подстановочным знаком в имениveth*
:
[keyfile]
unmanaged-devices=interface-name:veth*
Затем я перезапустил службу NetworkManager с помощью:sudo systemctl restart network-manager.service
После этого я смог перемещаться по Интернету, в то время как контейнеры Docker работали и прослушивали эти мостовые порты, такие как vethf6c1790
.