You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash输出中提取特定IP地址(含带端口场景)

如何从Bash输出中提取IP地址(含独立IP和带端口的IP)

我来帮你搞定这两种场景下的IP提取问题,用Bash里的常用工具就能轻松解决~

一、提取独立存在的IP地址

如果你的输出里IP是单独出现的(没有附带端口或其他后缀),用grep配合正则表达式就能直接提取。

常用命令:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' 你的输入文件
# 或者通过管道处理命令输出,比如:
你的Bash命令 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

参数说明:

  • -E:启用扩展正则表达式,让我们能更简洁地写IP的匹配规则
  • -o:只输出匹配到的部分(而不是整行)

例子:

假设你的输出是这样的:

$ ping -c 1 google.com | grep PING
PING google.com (142.250.190.142) 56(84) bytes of data.

运行命令:

ping -c 1 google.com | grep PING | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

输出结果就是:142.250.190.142

二、提取带端口号的IP地址(仅保留IP部分)

如果输出里的IP是类似192.168.0.100:8080这种带端口的格式,我们有两种常用方法提取纯IP:

方法1:先用grep匹配,再用sed去掉端口

你的Bash命令 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]+' | sed 's/:[0-9]*$//'
  • 第一步grep匹配带端口的完整字符串,第二步sed把末尾的:端口号部分删掉。

方法2:直接用grep匹配IP部分(更简单)

其实前面的IP正则也能匹配带端口字符串里的IP部分,因为正则只匹配四段数字,后面的端口会被自动忽略:

你的Bash命令 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

例子:

假设你的输出是这样的:

$ ss -tuln | grep LISTEN
tcp LISTEN 0 128 10.0.0.5:3000 0.0.0.0:*

运行命令:

ss -tuln | grep LISTEN | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

输出结果就是:10.0.0.5

额外技巧:匹配有效的IP地址(过滤无效值)

上面的正则会匹配像999.999.999.999这种无效IP,如果要确保提取的是合法的0-255范围内的IP,可以用更精确的正则:

grep -Eo '((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'

这个正则会严格匹配每段0-255的数字,避免提取无效的IP格式。

内容的提问来源于stack exchange,提问作者1995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:49:56