我有这个输出:
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 - -
我将此解决方案基于您尝试运行的命令,希望它更容易理解。
这可能不是执行此操作的最佳方法。