正如标题所说,我想在Windows中批量匹配ip地址,请告诉我如何才能做到这一点?
我看到“ findstr ”可以匹配正则expression式,如“ [0-9] ”,但“findstr”如何匹配它出现一到三次 ?
由于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
不会吐出这样的字符串。
FINDSTR是唯一支持正则表达式的本地批处理实用程序。 但支持是非常有限和不规范的。 唯一支持的重复表达式是*
。 此外,它最多限制为15个字符的类别术语(请参阅Windows FINDSTR命令的未记录的功能和限制是什么? )。 所以我不认为有可能开发一个精确匹配IP地址的本地批处理正则表达式。
您可以保留在本机窗口实用程序中,并使用Power Shell,也可以通过CSCRIPT命令使用JScript或VBScript。 所有这三个都有更好的正则表达式支持。
或者,您可以下载Unix工具的许多Windows端口中的任何一个,其中许多是免费的。 GnuWin32是一个很好的资源(包括grep): http ://gnuwin32.sourceforge.net/
一个简单的正则表达式字符串将是
(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地址范围。
修改上面的正则表达式为[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
在正则表达式解释中确实是有限的。
如果findtr命令的输入不应该是ipconfig的结果,则可以使用以下代码行在文本或csv文件中查找ip地址。
findstr /r "\<[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\>" filename.txt
它将元字符添加到用户Joey的答案中。 “\”在开始和“>”在结束。 尽管这样的字符串可能不是很常见(或者不太可能发生),但是这确保没有以类似ip地址的格式的字符串,但是在末尾和/或开始处具有字母字符(例如A198.252.206)。 16或198.252.206.16A)。