2

我有一个 IFCONFIG 的输出,我已将其清理为三个主要部分:

1) 名字

2) IP 地址

3) 网络掩码

目前这是通过以下字符串完成的:

ifconfig -a | grep eth -A 1 | awk '{print $1,$2,$4}' | sed 's/Link HWaddr//g;s/inet addr\://g;s/Mask\://g;s/\-\-//g;/^$/ d' | grep -v 'UP\|^ '

输出如下所示:

eth0 
192.168.0.60 255.255.255.0
eth1 
1.1.1.1 255.255.255.0
eth2 
eth2:2 
10.2.2.1 255.255.255.0
eth2:3 
10.3.3.1 255.255.255.0
eth2:4 
10.4.4.1 255.255.255.0
eth2:5 
10.5.5.1 255.255.255.0
eth2:6 
10.6.6.1 255.255.255.0
eth2:7 
10.7.7.1 255.255.255.0
eth2:8 
10.8.8.1 255.255.255.0
eth2:9 
10.9.9.1 255.255.255.0
eth2:10 
10.10.10.1 255.255.255.0
eth2:11 
10.11.11.1 255.255.255.0
eth2:12 
10.12.12.1 255.255.255.0
eth2:13 
10.13.13.1 255.255.255.0
eth2:14 
10.14.14.1 255.255.255.0
eth3 
eth3.2 
10.30.30.1 255.255.255.0
eth3.7 
10.33.77.1 255.255.255.0

现在,我有一些问题需要纠正:

1)我需要格式为(IFNAME IP 地址网络掩码),这意味着我需要将 IP/网络掩码向上移动一行到它的关联 IF

2)我想删除当前没有配置的接口。在上面的示例中,您可以看到 eth2 和 eth3 在物理接口上缺少配置,并且只有子接口/vlan 串接在它们之上。

再次感谢您一如既往的帮助!

4

2 回答 2

2

尝试将以下内容添加到您的命令中:

$ ... | tr -d '\n' | sed 's/eth/\neth/g' | awk 'NF>1'
eth0 192.168.0.60 255.255.255.0
eth1 1.1.1.1 255.255.255.0
eth2:2 10.2.2.1 255.255.255.0
eth2:3 10.3.3.1 255.255.255.0
eth2:4 10.4.4.1 255.255.255.0
eth2:5 10.5.5.1 255.255.255.0
eth2:6 10.6.6.1 255.255.255.0
eth2:7 10.7.7.1 255.255.255.0
eth2:8 10.8.8.1 255.255.255.0
eth2:9 10.9.9.1 255.255.255.0
eth2:10 10.10.10.1 255.255.255.0
eth2:11 10.11.11.1 255.255.255.0
eth2:12 10.12.12.1 255.255.255.0
eth2:13 10.13.13.1 255.255.255.0
eth2:14 10.14.14.1 255.255.255.0
eth3.2 10.30.30.1 255.255.255.0
eth3.7 10.33.77.1 255.255.255.0

它首先删除所有新行以将所有内容拉到一行,然后根据字段sed将其重新拆分为行。eth最后,它awk仅用于打印超过 1 个字段的行。

(但是,我确信您的整个命令可以进一步简化。看起来您的管道太多了!)

于 2013-02-27T14:13:56.070 回答
0

只是为了好玩,您可以在 sed 中进行所有操作:

ifconfig -a | sed -ne '/^eth/{s/\n//;h;n;H;g;s/\(\S*\).*inet addr:\([0-9.]*\).*Mask:\([0-9.]*\).*/\1 \2 \3/;p;}'

说明:对于以“eth”开头的每一行,删除换行符然后将该行放入保留空间 (h)。获取下一行 (n) 并附加该行以保留空间 (H)。用保留空间 (g) 覆盖当前行。对组合行执行替换以提取有用的位,然后打印结果。

于 2013-02-27T15:26:12.033 回答