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 地址。