.*
соответствует как можно большему числу символов (оно «жадное»), а поскольку [0-9]{1,3}
может соответствовать только 1 ди git, то 17
соответствует .*
и 2
соответствует [0-9]{1,3}
.
Вы можете остановить .*
до любого не-ди git:
sed -Ei 's~.*[^0-9]([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*~\1~' test.txt
Или до /
:
sed -Ei 's~.*/ *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*~\1~' test.txt
См. online sed demo :
s='siemplog1.nw.lan / 172.31.180.22'
sed -E 's~.*/ *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*~\1~' <<< "$s"
# => 172.31.180.22
Если строка всегда в этом формате, вы можете упростить команду sed до
sed -E 's~.*/ *([0-9.]+)~\1~p'
sed -E 's~.*/ *([0-9.]+).*~\1~p'