2013-02-27 98 views
2

我有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 /網絡掩碼上線到它的相關聯中號

2)我想刪除當前沒有配置的接口。在上面的示例中,您可以看到eth2和eth3在物理接口上缺少配置,並且只有子接口/ vlan被串接。

再次感謝您一如既往的幫助!

回答

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個字段的行。

(不過,我敢肯定,你的整個命令可以進一步簡化它看起來像你有太多的管道。!)

+0

它看起來像它雖然我需要它,但謝謝你:) – Numpty 2013-02-27 14:20:07

+0

不得不看看NF做了什麼,看中:) – Numpty 2013-02-27 14:21:10

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)。在組合線上執行替換以提取有用位,然後打印結果。