![Linux CentOS grep 表达式](https://linux22.com/image/123369/Linux%20CentOS%20grep%20%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我试图找到一个 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 地址超出了本答案的范围。