从“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的第二行eth-g1(当然它是一个虚构的ip)

我正在尝试将其输出到一行中,而无需\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

你的问题有点难以解读,但我认为这可能就是你想要做的:

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

我将此解决方案基于您尝试运行的命令,希望它更容易理解。

这可能不是执行此操作的最佳方法。

相关内容