Как сопоставить IP-адрес с помощью 'findstr'?Или любой другой метод пакетной обработки в Windows - PullRequest
3 голосов
/ 03 апреля 2012

Как видно из названия, я хочу сопоставить IP-адрес с пакетным в Windows, пожалуйста, скажите, как я могу это сделать?Я вижу, что « findstr » может совпадать с регулярным выражением типа « [0-9] », но как «findstr» может соответствовать этому, появляется один-три раза

Ответы [ 4 ]

5 голосов
/ 03 апреля 2012

Поскольку поддержка регулярных выражений findstr немного ... устарела, вы обычно не можете использовать большинство регулярных выражений, которые вы найдете в Интернете.Следующее соответствует четырем сериям цифр, разделенных точками:

ipconfig | findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"

Однако, если вас интересуют только адреса, а не маски подсетей, вы можете использовать

ipconfig | findstr /r "Address.*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"

И да, если бы также совпадало с такими вещами, как Address: 232345.534.78678.345, который явно не является IP-адресомНо обычно ipconfig не выплевывает такие строки.

2 голосов
/ 03 апреля 2012

FINDSTR - единственная встроенная пакетная утилита, которая поддерживает регулярные выражения. Но поддержка очень ограниченная и нестандартная. Единственное поддерживаемое повторное выражение - *. Кроме того, он ограничен максимум 15 терминами классов символов (см. Каковы недокументированные функции и ограничения команды Windows FINDSTR? ). Поэтому я не думаю, что можно разработать собственное регулярное выражение, которое будет точно соответствовать IP-адресу.

Вы можете остаться в собственных утилитах Windows и использовать Power Shell, или вы можете использовать JScript или VBScript с помощью команды CSCRIPT. Все три имеют гораздо лучшую поддержку регулярных выражений.

Кроме того, вы можете загрузить любой из нескольких портов Windows утилит Unix, многие из которых бесплатны. GnuWin32 - хороший ресурс (включает grep): http://gnuwin32.sourceforge.net/

1 голос
/ 11 июля 2013

В случае, если ввод вашей команды findstr не должен быть результатом ipconfig, Вы можете использовать следующую строку кода для поиска IP-адреса в текстовом или CSV-файле.

findstr /r "\<[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\>" filename.txt

Добавляет метасимволы к ответу пользователя Joey. "\ <" </strong> в начале и ">" в конце. Даже если такая строка не очень распространена (или очень маловероятна) происходит), это гарантирует, что нет строки в формате, подобном IP-адресу, но с возвращается буквенный символ в конце и / или начале (например, A198.252.206.16 или 198.252.206.16A).

1 голос
/ 03 апреля 2012

Упрощенная строка регулярного выражения будет

(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(1?[0-9]?[0-9]|2[0-4][0-9])|25[0-5]

, чтобы точно соответствовать диапазону допустимых IP-адресов.

РЕДАКТИРОВАТЬ: на основе комментариев ниже и Регулярные выражения в информации findstr , измените приведенное выше регулярное выражение на [0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9], чтобы соответствовать IP-адресам.Очевидно, FINDSTR действительно ограничен в интерпретации регулярных выражений.

...