Чтобы распечатать только IPv4, вы можете извлечь то, что совпадает с опцией -o
для grep.
В качестве более простого примера вы можете сделать:
$ echo "this is a simple test to extract 123.234.34.5 as an IP" |
grep -o '[0-9.]*'
123.234.34.5
Но это не будет точно соответствовать одному IPv4.
Для сопоставления IP-адреса с регулярным выражением несколько сложно. Регулярное выражение не понимает числовые диапазоны, только текст. Мы можем сопоставить одно числовое значение 0 -255 с (регулярным выражением, которое игнорирует пробелы и комментарии):
25[012345] | # the numers 250 - 255 or
2[01234](?P[0123456789]) | # 200 - 249 or
1(?&digit){2} | # 100 - 199 or
#0? # Allow leading zero
[1-9](?&digit) | # 10 - 99 or
#0{0,2} # Allow leading zeros
(?&digit) # 0 - 9
Удалите комментарии к первому столбцу, чтобы включить ведущие нули.
Чтобы избежать повторения [0-9]
, использовать явные числовые диапазоны (, избегать сопоставления чисел на других языках )и давать имя каждой совпадающей группе, мы можем использовать «Именованные группы захвата» из PCRE :
. ]
(?P # Define this as one full byte value.
25[012345] | # the numers 250 - 255 or
2[01234](?P[0123456789]) | # 200 - 249 or
1(?&digit){2} | # 100 - 199 or
#0? # Allow leading zero
[1-9](?&digit) | # 10 - 99 or
#0{0,2} # Allow leading zeros
(?&digit) # 0 - 9
) # close one full byte definition
Затем нам просто нужно повторить использование определения байта с ведущей точкой (\.(?&byte)){3}
еще три раза и некоторыми начальными и конечными маркерами, как показано в этой ссылке
Начальный и конечный маркеры могут быть более простыми «границами слов» (\b
), если это то, что необходимо, как показано в этой другой ссылке
В оболочке с регулярным выражением grep PCRE команда может быть записана как:
$ grep -oP '(?xm)(?<=^|[^01234567890.])(?P25[012345]|2[01234](?P[0123456789])|[01]?(?&digit){1,2})(\.(?&byte)){3}(?=[^01234567890.]|$)' <<<"$a"
1.2.3.4
11.22.33.44
123.234.34.5
1.1.192.168
123.234.34.123
123.234.34.123
1.2.3.255
255.255.255.255
1.1.168.192
1.14.2.90
1.2.3.4
Учитывая, что тестовая строка содержит:
$ a='1.2.3.4
11.22.33.44
123.234.34.5
1.1.192.168
text 123.234.34.123 more text
text123.234.34.123more text
1.2.3.255
1.2.3.256
255.255.255.255
256.2.3.4
1123.234.34.123
123.234.34.1235
.123.234.34.123
123.234.34.123.
not 1.1.168.192 in 1.1.168.192.in-addr.arpa.
not 1.14.2.90 in xserver-common_1.14.2.901-2_all.deb
1.2.3.4'
Если у вас нет доступных сетевых служб для подключения к серверу, вы не можете подключиться к нему по сети.
Альтернативные подходы
Используйте физическую консоль или, если вы не находитесь локально на машине, попросите кого-нибудь еще войти в физическую консоль. Возможно, системный администратор или кто-то из хостинговой компании, если она размещена.
Если сервер является виртуальной машиной, вы можете войти в консоль удаленно, используя IPMI или другую подобную технологию.