【问题标题】:Parsing ifconfig解析 ifconfig
【发布时间】: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:0eth0:1 等)。

标签: shell ifconfig


【解决方案1】:

这有点蹩脚,但只需在上面的代码中添加类似这样的内容:

| sed '/RX/{n;s/[^[:space:]]/RX &/};/TX/{n;s/[^[:space:]]/TX &/}'

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 2010-11-22
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2014-07-19
    • 2015-01-22
    • 2011-09-29
    • 2014-10-29
    相关资源
    最近更新 更多