解析' ifconfig'的输出在bash中

时间:2014-06-05 07:53:18

标签: bash parsing

我需要能够在接口上提取IPv4掩码/前缀长度并以CIDR格式表示它。例如:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:56:9f:af:5b
          inet addr: 20.30.40.50  Bcast:20.30.40.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe9f:af5b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:261023 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22390 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:76737163 (76.7 MB)  TX bytes:2750807 (2.7 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:81879 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81879 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8061949 (8.0 MB)  TX bytes:8061949 (8.0 MB)

我需要获取' Mask'关于eth0的(255.255.255.0)并将其表示为' / 24'。我怎么在bash中这样做?

或者是否有其他方法可以获取我正在寻找的信息?

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以创建这样的脚本来解析ifconfig输出并打印mask值:

ifconfig | awk -F 'Mask:' '/Mask/ && !/127\.0\.0\.1/{print $2 "/24"}'
255.255.255.0/24

答案 1 :(得分:0)

您可以使用ip命令。

ip -4 a | grep 'inet' | awk '{print $2}'

答案 2 :(得分:0)

也许这个:

echo -n /;ip -4 addr | awk '/eth0/ { getline; {print $2} }' | cut -f2 -d/

答案 3 :(得分:0)

以下是使用sed提取Mask的方法:

ifconfig eth0|sed -n "s|.*Mask:\(.*\)|\1|p"