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

如何从ifconfig命令输出中捕获首个IP地址?

嘿,我来分享几个实用的小技巧,帮你从ifconfig的输出里精准捕获第一个出现的非回环IP地址,都是日常运维里常用的方法:

方法1:用awk快速提取(最简洁)

awk是处理文本的利器,这条命令能直接定位到IP行并提取第一个有效IP,效率很高:

ifconfig | awk '/inet / && !/127.0.0.1/ {print $2; exit}'

拆解一下逻辑:

  • /inet /:匹配包含inet 的行(注意后面的空格,避免误匹配IPv6的inet6行)
  • !/127.0.0.1/:过滤掉本地回环地址,如果你需要包含回环的话,直接删掉这个条件就行
  • print $2:打印该行的第二个字段(刚好就是IP地址)
  • exit:找到第一个匹配的行就立刻退出,确保只返回第一个IP

方法2:结合grep和cut(适合正则爱好者)

如果你更习惯用grep,这个组合也能轻松搞定:

ifconfig | grep -oP 'inet \K[\d.]+' | grep -v '127.0.0.1' | head -n1

解释:

  • grep -oP:启用Perl兼容正则,只输出匹配到的内容片段
  • inet \K[\d.]+:匹配inet 后面的数字+点组合,\K会忽略前面的inet ,直接返回IP部分
  • grep -v '127.0.0.1':同样过滤回环地址
  • head -n1:只保留第一个匹配结果

方法3:适配新版系统(或用ip addr命令)

如果你的系统ifconfig输出格式略有不同,或者更推荐用现代的ip addr命令,这个方法可以处理带子网掩码的IP:

ip addr show | awk '/inet / && !/127.0.0.1/ {split($2, ip_part, "/"); print ip_part[1]; exit}'

因为ip addr输出的IP是带子网的(比如192.168.1.100/24),所以用split把IP和掩码拆分,只取前面的纯IP。

预期结果示例

假设你的ifconfig输出如下:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe12:3456 prefixlen 64 scopeid 0x20
ether 08:00:27:12:34:56 txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10

运行方法1的命令后,你会得到:

192.168.1.100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:35:02