2

IFCONFIG の出力を取得しました。これを 3 つの主要部分にサニタイズしました。

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 まで 1 行上に移動する必要があります。

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

最初にすべての新しい行を削除してすべてを 1 行にまとめてから、 を使用sedしてフィールドに基づいて行に分割しethます。最後に、awk複数のフィールドを持つ行のみを印刷するために使用します。

(ただし、コマンド全体をさらに簡素化できると確信しています。パイプが多すぎるようです!)

于 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 に答える