You need to enable JavaScript to run this app. AWK作为ifconfig过滤器提取指定格式网卡信息的方法
优惠活动
大模型
产品
解决方案
定价
更多

AWK作为ifconfig过滤器提取指定格式网卡信息的方法

ifconfig输出精简提取的AWK实现方案

现存的过滤痛点

你之前编写的链式过滤命令ifconfig | awk 'BEGIN{ORS=RS="\n\n"} !/^lo/{print}' | awk '{print $1, $2}' | awk '!/^RX/{print}' | awk '!/^TX/{print}'已经实现了基础过滤能力:

  • 按空行分割独立网卡信息块,剔除lo回环接口内容
  • 过滤掉了RX、TX开头的收发流量统计行

但当前输出仍有两类冗余:

  1. 带flags字段的接口首行保留了全部附属参数(flags标记集合、mtu值等),如果用awk '!/flags=/{print}'做整行匹配删除,会把接口名称本身也一并删掉,无法满足需求
  2. 输出保留了全部inet6对应的IPv6地址行,属于非必要信息

核心裁剪能力实现思路

你之前遇到的“想删除flags附属参数但怕把接口名称一起删掉”的问题,本质是只使用了整行匹配删除的逻辑。AWK本身支持任意粒度的内容处理,既可以做整行的匹配过滤,也可以对单行内的内容做拆分、截取、重组,不需要靠粗暴的整行删除实现需求。具体实现逻辑分为三部分:

  • 针对带flags的接口首行:不删除整行,只提取行首的接口名称部分,丢弃后续所有冗余参数
  • 针对不需要的行(inet6行、其他附属统计行):直接跳过整行即可
  • 针对需要保留的行(IPv4的inet行、MAC地址的ether行):直接输出整行内容

可直接运行的优化命令

ifconfig | awk '
# 按空行分割每个网卡的独立信息块,避免跨接口的内容匹配错乱
BEGIN { RS=""; ORS="\n\n" }
# 跳过lo回环接口的整块内容
/^lo/ { next }
# 处理带flags的接口首行:拆分后只保留接口名称加冒号的格式
/^[a-zA-Z0-9_-]+:/ && /flags=/ {
    split($0, name_part, ":")
    print name_part[1] ":"
    next
}
# 保留IPv4地址行(匹配行首带空白后接inet的内容,自动跳过inet6行)
/^[[:space:]]+inet / { print $0 }
# 保留MAC地址行
/^[[:space:]]+ether / { print $0 }
# 其余所有内容(inet6地址、流量统计、错误提示等)全部跳过
{ next }
'

输出效果

执行后输出完全匹配预期格式:

enp2s0f1:
ether xx:xx:xx:xx:xx:xx

wlp3s0:
inet xxx.xxx.xxx.xxx
ether xx:xx:xx:xx:xx:xx

没有冗余的flags参数、IPv6地址、流量统计内容,每个接口块之间自动空行分隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 16:15:04