Linux CentOS grep 表达式

Linux CentOS grep 表达式

我试图找到一个 grep 表达式,它将在每个文件和目录中的任何文件中查找 IP 地址。

我还没有掌握grep,但认为“应该有”?简单的事情。有什么想法吗?

答案1

匹配看起来像 IPv4 地址并且仅在 0.0.0.0 和 255.255.255.255 范围之间的扩展模式是:

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

您需要将egrep(或grep -E) 与该表达式以及后面的所有表达式一起使用。

请注意,这也会捕获像 1111.2.3.444 这样的奇怪异常值,因为它会匹配111.2.3.44. (可以编写更复杂的测试,但它们的可读性更差。)

如果你不关心1111.2.3.444,你不关心诸如 999.000.011.555 匹配之类的事情,ilkkachu 在评论中建议的更简单的正则表达式是([0-9]{1,3}\.){3}[0-9]{1,3}.

要查看所有目录,您可能还需要合并find

find /var/log -type f -exec egrep '([0-9]{1,3}\.){3}[0-9]{1,3}' '{}' +

这使用了 GNUfind行为+来创建单个命令行,而不是grep在系列中的每个文件上运行,并且依次依赖于grep首先打印匹配文件的名称(几乎每个文件都grep这样做)。

检测 IPv6 地址超出了本答案的范围。

相关内容