在单独的行中打印命令输出

在单独的行中打印命令输出
ip a | egrep '([0-9]{1,3}\.){3}[0-9]{1,3}|enp0s' | grep -e 10 -e 172 -e 192 | awk '{print $2}' | awk '{gsub("/24", "");print}' | xargs

上述命令的输出如下:

enp0s3: 10.0.2.15 enp0s8: 192.168.56.100

我希望输出以网卡名称开头的两行不同的方式打印。

如何编辑输出以获得所需的结果?

答案1

我想你正在寻找的是

 ip a | awk '/inet .*enp[0-9]*s[0-9]*/ { print $NF " " gensub(/\/[0-9]*/,"",1,$2); }'

请注意,我修改了接口名称的匹配以接受多个 enp0s(在我的系统上,许多接口都是 enp2s*)。另外,我将行与 'inet ' 匹配,这将排除 ipv6 地址 ( 'inet6 ' )。

答案2

一个快速而肮脏的解决方案是提供xargs一个-L 2选项。最好只是在 ; 中完成这一切awk。它非常强大。

您意识到-e 10给定的搜索字符串grep 可以轻松匹配以太网地址或 IPv6 地址。

相关内容