「ifconfig」出力からインターフェース名とIPアドレスを抽出する

「ifconfig」出力からインターフェース名とIPアドレスを抽出する

私は次のような結果を得ました。

eth-g0    Link encap:Ethernet  HWaddr 44 
      inet addr:222.222.22.22  Bcafdst:0.0.0.0 
      UP BROADCAST RUNNING MULTICAST  MTU:1500 
      RX packets:9073618 errors:0 dropped:0 overruns:0 
      TX packets:6846448 errors:0 dropped:0 overruns:0 
      collisions:0 txqueuelen:1000 
      RX bytes:16fd45599237 (1.99 GiB)  TX bytes:1937392674 (1.8 
      Interrupt:36 
eth-g1    Link encap:Ethernet  HWaddr 44 
      inet addr:22.222.222.22  Bcast:0.2.2.2 
      UP BROADCAST MULTICAST  MTU:1500 
      RX packets:0 errors:0 dropped:0 overruns:0 
      TX packets:0 errors:0 dropped:0 overruns:0 
      collisions:0 txqueuelen:1200 
      RX bytes:0 (0.0 b)  TX bytes:0 (0.0 
      Interrupt:37 

次の出力が必要です。

eth-g0 inet 222.222.22.22

inetのない2行目eth-g1(もちろん仮想IPです)

私はこれなしで1行で出力しようとしています。\n

これまで私は試しました

ifconfig| egrep -o  "eth-g0...|inet................"

しかし、時にはそのようなことがあるので、それほど良いではありません。

inet 222.22.22.222

時々

inet addr 22.222.22.22

新しい行にすべてを印刷します。

答え1

$ ifconfig | awk '/^eth-g0/ { iface = $1; getline; sub("addr:", ""); print iface, $1, $2 }'
eth-g0 inet 222.222.22.22

これは解析された出力を使用しますawk。文字列で始まる行が見つかった場合は、eth-g0最初の単語を変数(インターフェース名)に保存してから、次の行をすぐに読み取り、新しい行addr:から削除します。次に、インターフェイス名とスペースで区切られた最初の2つの単語を新しい行に印刷します。

答え2

あなたの質問は解読するのが少し難しいですが、おそらくこれはあなたが望むものだと思います。

ifconfig | grep -A1 "^eth-g0 " | grep -Eo "^eth[^ ]+|inet (addr )?[^ ]+" | paste - -

このソリューションは、実行したいコマンドに基づいて理解しやすくなります。

これは最善の方法ではないかもしれません。

関連情報