私は次のような結果を得ました。
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 - -
このソリューションは、実行したいコマンドに基づいて理解しやすくなります。
これは最善の方法ではないかもしれません。