使用awk获取IP地址

本文介绍了一种使用 ifconfig 和 awk 命令来获取 eth0 网口 IP 地址的方法。通过设置分隔符和匹配 inetaddr 字符串,可以准确地从 ifconfig 的输出中提取所需的 IP 地址。
ifconfig eth0 |awk -F ' *|:' '/inet addr/{print $4}'


获取网口eth0的IP地址:

-F的参数“ *|:”,表示任意个空格或:用来做分隔符。

/inet addr/,表示输出结果要匹配“inet addr”这段字符。

都有正则的影子。

<think> 我们使用`ifconfig`或`ip addr`命令获取网络信息,然后用`awk`提取IP地址。以下是几种常见方法: ### 方法1:提取特定网卡的IP(如eth0) ```bash ifconfig eth0 | awk '/inet / {print $2}' # 传统ifconfig ``` - **解释**: - `ifconfig eth0`:输出eth0网卡信息 - `awk '/inet / {print $2}'`:匹配包含"inet "的行,打印第二列(即IP地址- **示例输出**: ``` 192.168.1.100 ``` ### 方法2:提取所有IPv4地址(排除回环地址) ```bash ip addr | awk '/inet / && !/127.0.0.1/ {gsub("/.*", "", $2); print $2}' ``` - **解释**: - `ip addr`:输出所有网络接口信息 - `awk`过滤条件: - `/inet /`:匹配包含"inet "的行(IPv4地址- `!/127.0.0.1/`:排除回环地址 - `gsub("/.*", "", $2)`:去除子网掩码部分(如将`192.168.1.100/24`变为`192.168.1.100`) - `print $2`:打印处理后的IP - **示例输出**: ``` 192.168.1.100 10.0.0.5 ``` ### 方法3:兼容多网卡场景(提取第一个非回环IP) ```bash ifconfig | awk 'BEGIN {RS=""} !/LOOPBACK/ {print $6}' | head -n1 ``` - **解释**: - `BEGIN {RS=""}`:设置空行作为记录分隔符(每个网卡信息为一个记录块) - `!/LOOPBACK/`:排除回环接口 - `print $6`:打印当前块的第六个字段(IP地址位置) - `head -n1`:取第一个结果 ### ⚠️ 注意事项 1. **命令兼容性**: - `ifconfig`需安装`net-tools`(新系统默认可能无此命令) - 推荐使用`ip addr`(现代Linux系统均支持) 2. **精确匹配**: - 若需指定网卡(如`wlan0`),将命令中的`eth0`替换为目标网卡名 3. **多IP处理**: - 当主机有多个IP时,上述方法可能返回多个结果,可用`head`或`tail`筛选 ### 完整示例:获取eth0的IP ```bash # 方法1(ifconfig) ifconfig eth0 | awk '/inet / {print $2}' # 方法2(ip addr) ip -4 addr show eth0 | awk '/inet/ {print $2}' | cut -d'/' -f1 ``` - **输出一致**: ``` 192.168.1.100 ``` ### 进阶:封装为脚本 ```bash #!/bin/bash # 获取本机IPv4地址(排除127.0.0.1) get_ip() { ip -o -4 addr list | grep -v 127.0.0.1 | awk '{print $4}' | cut -d'/' -f1 | head -n1 } echo "主机IP: $(get_ip)" ``` §§相关问题§§ 1. 如何用`awk`提取Linux主机的MAC地址? 2. 如何通过Shell脚本判断IP地址是否合法? 3. 怎样用`awk`统计Nginx日志中访问量最高的IP? [^1]: Linux三剑客awk提取网卡IP地址 [^2]: python 获取linux ip_Python获取linux主机ip的简单实现方法 [^3]: 使用ifconfig结合awk提取主机的IP地址方法 [^4]: Linux Shell脚本中获取本机ip地址方法 </think>### 使用`awk`获取Linux主机IP地址的方法 以下是几种常用方法,通过`awk`结合网络命令提取主机IP地址--- #### **方法1:提取特定网卡的IP(推荐)** ```bash ip addr show eth0 | awk '/inet / {gsub("/.*", "", $2); print $2}' ``` - **输出示例**: `192.168.1.100` - **说明**: 1. `ip addr show eth0`:获取eth0网卡信息 2. `/inet /`:匹配包含"inet "的行(IPv4地址) 3. `gsub("/.*", "", $2)`:删除子网掩码(如`/24`) 4. `print $2`:输出IP地址[^3][^4] --- #### **方法2:提取所有非回环IPv4地址** ```bash ip -o addr | awk '/inet / && !/127.0.0.1/ {gsub("/.*", "", $4); print $4}' ``` - **输出示例**: ```bash 192.168.1.100 10.0.0.5 ``` - **说明**: - `-o`:单行输出格式 - `!/127.0.0.1/`:排除回环地址 - `$4`:IP地址所在列[^4] --- #### **方法3:兼容旧版`ifconfig`** ```bash ifconfig eth0 | awk '/inet / {print $2}' ``` - **输出示例**: `192.168.1.100` - **注意**:需安装`net-tools`包(现代系统推荐使用`ip`命令)[^3] --- #### **方法4:提取多网卡IP列表** ```bash ip -4 addr | awk ' /^[0-9]+:/ {interface=$2} /inet / {gsub("/.*","",$2); print interface ":" $2} ' ``` - **输出示例**: ```bash eth0:192.168.1.100 wlan0:10.0.0.5 ``` --- ### 关键注意事项 1. **命令选择**: - 优先使用`ip`命令(现代系统标准) - `ifconfig`已逐步淘汰,可能需安装`net-tools` 2. **精确匹配**: - 使用`/inet /`而非`/inet/`,避免匹配`inet6` - 添加`! /127.0.0.1/`排除回环地址 3. **子网掩码处理**: - `gsub("/.*", "", $2)`移除CIDR后缀(如`/24`) 4. **多IP场景**: - 若需获取所有IP,移除网卡过滤条件 > 通过管道组合命令:`ip addr | grep 'eth0' | awk '...'`可进一步过滤特定网卡[^1][^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值