我有IFCONFIG的输出,我已经清理了三个主要部分:
1)IFNAME
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绑定它们。
再次感谢您的帮助!
答案 0 :(得分: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个字段的那些行。
(但是,我确信你的整个命令可以进一步简化。看起来你的管道太多了!)
答案 1 :(得分: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)覆盖当前行。在组合线上执行替换以拉出有用位,然后打印结果。