【发布时间】:2020-04-15 16:25:13
【问题描述】:
尝试解析 ifconfig 输出,但我一辈子都无法让这种格式的最后一部分工作。这是我所拥有的:
ifconfig -a | awk 'BEGIN{ORS=RS="\n\n"} !/^lo/{print}' | sed 's/\s\+\s/=/g
s/.\overruns/=overruns/
/:[^=:]\+:/s/:[^=:]\+ /&=/g
s/^=/\t/
s/ *=$//
s/ *=/\n\t/g' | grep 'RX\|TX\|eth\|wlan\|dropped\|inet\|bytes\|BROAD'
这会输出:
eth0: flags
4163<UP,BROADCAST,RUNNING,MULTICAST>
inet 172.17.0.2
inet6 fe80::42:acff:fe11:2
ether 02:42:ac:11:00:02
RX packets 163
bytes 7230 (7.0 KiB)
RX errors 0
dropped 0
TX packets 1501
bytes 111873 (109.2 KiB)
TX errors 0
dropped 0
我正在尝试将 RX 和 TX 添加到它们对应的对中,如下所示:
eth0: flags
4163<UP,BROADCAST,RUNNING,MULTICAST>
inet 172.17.0.2
inet6 fe80::42:acff:fe11:2
ether 02:42:ac:11:00:02
RX packets 163
**RX bytes** 7230 (7.0 KiB)
RX errors 0
**RX dropped** 0
TX packets 1501
**TX bytes** 111873 (109.2 KiB)
TX errors 0
**TX dropped** 0
我们将不胜感激任何朝着正确方向的推动!
【问题讨论】:
-
用python脚本来做,它有正则表达式之类的工具,如果你修改它,它的可读性会更差。那你只需要
ifconfig -a | python parseifconfig.py -
注意
ifconfig已经很久没有维护了;在新代码中使用它通常是不明智的。ip命令提供了相同的信息,该命令还知道在编写ifconfig时不存在的内核和网络堆栈的较新部分。 -
(f/e,如果你有一个命名别名,
ifconfig将完全忽略它,除非你使用的是你的发行版本地修补的版本;它知道的唯一接口别名是编号的;eth0:0、eth0:1等)。