С помощью следующего grep
синтаксиса я хочу сопоставить все IP-адреса в файле (из ksh
скрипта)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Проблема: он также соответствует словам (IP), которые имеют более 4 октетов:
1.1.1.1.1
или
192.1.1.1.160
Как сопоставить действительный IP-адрес и только IP-адреса с 4 октетами? Я также могу использовать Perl - однострочное синтаксическое решение, если grep
оно не работает.
regex
grep
ip-address
Jennifer
источник
источник
999.999.999.999
тоже будет соответствовать .192.1.4097
действительны и принимаются Linux glibc и Windows.ping 2130706433
На OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
и0177.1
Ответы:
попробуй это:
который соответствует всем выражениям от
0.0.0.0
до999.999.999.999
с
вы получите только IP-адреса
примечание:
на солярисе, вероятно, egrep сделает работу.
источник
grep -E <pattern> <file>
(или, просто напечатать совпадения:grep -Eo <pattern> <file>
1.1.1.1.1
но оно скрывает последнее.1
от вывода, я не вижу, как это может помочь.Как это:
источник
192.1.1.1.160
как192.1.1.1
, что, я думаю, хорошо для задающего вопрос.)Если флаг
grep
помечает его как совпадающий на границах слов, это означает, что ваше совпадение должно быть либо окружено пробелами, либо начинаться / заканчиваться в начале / конце строки!источник
Чтобы найти совпадения только с 4 октетами (исключая такие вещи, как 1.1.1.1.1), используйте это:
Он никогда не должен обнаруживать не-IP-адреса. Выражение может быть более сложным для проверки большего количества вещей, но это должно работать для большинства случаев. Он не будет совпадать с предыдущим 0, поскольку 010.1.12.1 не является обычным способом записи IP-адресов.
источник
источник
Немного сложно, но это должно работать:
источник
127.000.000.001
тогда? ;-)ping 127.000.000.001
конечно, работает на моем Mac. Но потом: я только что узнал, что дажеping 2130706433
дает тот же результат. :-) Ой,ping 00127.00000.00000.00001
переводится как87.0.0.1
. Странно ... Или восьмеричный может быть? Да, восьмеричное точно, так что вы правы насчет начальных нулей, я думаю.Модифицированная версия ответа Арно Б.
Это выражение не будет соответствовать IP-адресам с ведущими 0. например, оно не будет соответствовать 192.168.1.01. Это выражение не будет соответствовать IP-адресам с более чем 4 октетами. например, он не будет соответствовать 192.168.1.2.3
источник
Я использую
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
для сопоставления IP-адресов в начале строки. Он также может быть использован без,^
чтобы разрешить пробелы или другие символы до IP-адреса.источник
Укороченная версия длинного регулярного выражения:
Пожалуйста, используйте grep -E или egrep в зависимости от версии вашей ОС.
источник
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> нет результатаgrep -Eo '([0-9] {1,3}.?) {4}'
Пример: curl http://korben.info/ip | grep "IP visible depuis mon serveur" | grep -Eo '([0-9] {1,3}.?) {4}'
источник
Регулярное выражение для сопоставления IP-адреса в TCL
источник
Вот что у меня работает для ksh и ksh93 в AIX:
ф =
[[$ ip == [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ( "" | [0-9]) [0-9] @. ( "" | [0-9]) @ ( "" | [0-9]). [0-9] @ ( "" | [0-9]) @ ("" | [0-9])]] && echo OK || echo NOK Выше можно изменить, чтобы «отфильтровать» предоставленный IP по любому желаемому шаблону.
источник