grep 在文本文件中显示所有 IP(linux)

grep 在文本文件中显示所有 IP(linux)

我正在编写一个脚本来查找来自某个外部 IP 的 ping,但我无法理解如何格式化我的“grep”命令。我的文本文件中是“netstat anp”命令的输出。在 Windows 中,我可以使用以下命令实现此目的:

grep -oP (\d{1,3}\.){1,3}\d{1,3} inc.txt  

文本文件中的输出格式如下:

Active Internet connections (w/o servers)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State        
tcp        0      1 172.18.24.12:51699      72.21.91.17:https       FIN_WAIT1    
tcp        0      1 172.18.24.12:55154      71.19.176.223:https     FIN_WAIT1  
tcp        0      1 172.18.24.12:59926      173.194.46.89:http      FIN_WAIT1  

(我计划过滤掉本地地址)。但我似乎无法弄清楚如何为我的 bash 脚本格式化此命令。我想这里没有人可以帮我解决这个问题吧?如果有人能提供帮助,我将不胜感激。

答案1

仅引用正则表达式似乎对我有用:

grep -oP '(\d{1,3}\.){1,3}\d{1,3}' inc.txt

由 barlop 编辑-

'(\d{1,3}\.){3}\d{1,3}' 或者像斯科特 (Scott) 所说的那样,如果你想要使它正好是 4 个八位字节,不多也不少,那么可以更具体一些 。

答案2

从脚本或 shell 进行的连续发现方法如下:

例如,假设我们正在寻找 72.21.95.46

grep ' 72\.' netstat.txt will give you all the ip addresses that start with 72.

然后,你可以使用后续的 grep 过滤该输出,以将 IP 限制为某个系列或唯一 IP:

在 shell 中你可以使用“用 bang bang 重复上一个命令”:

!! | grep 21\.

从脚本

grep ' 72\.' | grep 21\. 

等等。

要一次性完成,只需说

grep 72.21.95.46 netstat.txt

点将扩展为任何单个字符

如果你正在驾驶航天飞机,请使用:

grep '72\.21\.95\.46' netstat.txt

相关内容