我正在编写一个脚本来查找来自某个外部 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