Sed удалить также часть IP-адреса - PullRequest
1 голос
/ 06 апреля 2020

может кто-нибудь помочь мне с этим? У меня есть эта строка

test.txt

siemplog1.nw.lan / 172.31.180.22

Я пробовал эту команду sed -Ei "s/^[a-z A-Z].*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/" test.txt

результат должен быть 172.31.180.22, но я получил это 2.31.180.22

спасибо

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Если у вас есть место до ip

$echo 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/"
172.31.180.22
$

0 голосов
/ 06 апреля 2020

.* соответствует как можно большему числу символов (оно «жадное»), а поскольку [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'
...