使用awk或sed从ifconfig解析数据?

faz*_*oso 2 linux awk parsing sed ifconfig

我试图用sed解析ifconfig输出中的一些数据,但我无法正确执行.我希望命令只提取我之后的数字.

例如,我有兴趣提取发送的字节:

eth1      Link encap:Ethernet  HWaddr 00:00:00:09:15:f7  
      inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::92e2:baff:fe08:35c7/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:75141 errors:0 dropped:0 overruns:0 frame:0
      TX packets:78046 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:9040489 (9.0 MB)  TX bytes:34806464 (34.8 MB)
Run Code Online (Sandbox Code Playgroud)

如果我使用sed:

ifconfig eth1 | sed 's|.*RX bytes:\([0-9]*\).*|\1|g'
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

eth1      Link encap:Ethernet  HWaddr 00:00:00:09:15:f7  
      inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::92e2:baff:fe08:35c7/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:75141 errors:0 dropped:0 overruns:0 frame:0
      TX packets:78046 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
9040627
Run Code Online (Sandbox Code Playgroud)

但我只对'9040627感兴趣'有没有办法用sed做,或者我应该使用awk或其他替代品?

编辑:我正在使用busybox二进制文件,因此我的选项有限.

And*_*ath 14

恕我直言ifconfig- 输出没有标准.它(可能)从一个系统变为另一个系统,从发布到发布.

如果我是你,我会选择/sys文件系统.您也可以从那里获得所有信息 - 无需后期处理.

$ cat /sys/class/net/eth0/statistics/rx_bytes
37016050
Run Code Online (Sandbox Code Playgroud)


kev*_*kev 9

用途grep:

ifconfig | grep -oP '(?<=RX bytes:)[0-9]*'
Run Code Online (Sandbox Code Playgroud)

用途awk:

ifconfig | awk -F: '/RX bytes/{print $2+0}'
Run Code Online (Sandbox Code Playgroud)

  • 您可能已经找到了一个不错的选择,但这是我的(在 OpenWRT 的 busybox 上测试过):`awk'/eth0: / { print $2; }' /proc/net/dev` (2认同)