$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:0a:80:00:06 brd ff:ff:ff:ff:ff:ff
inet 10.128.0.6/32 brd 10.128.0.6 scope global noprefixroute dynamic eth0
valid_lft 2327sec preferred_lft 2327sec
inet6 fe80::4001:aff:fe80:6/64 scope link noprefixroute
valid_lft forever preferred_lft forever
我已经尝试了下面的命令,但我想用“0”替换最后一个八位字节
ip a | grep ": eth0" -A 2 | grep inet | awk '{print $2}'
10.128.0.6/32
预期输出
10.128.0.0/32
注意:- IP 地址最后一个八位字节超过一位数字,例如,最后一个八位字节最少为一位数字,最多为三位
10.128.0.6
10.128.0.16
10.128.0.116
所以基本上我们需要用“\”之间的字符串替换“0”
最佳答案
您能否尝试以下操作(因为OP提到的ip a
命令没有示例,因此无法测试)。
编辑:根据OP的要求添加一种线性形式的解决方案,该解决方案也将值保存到变量中:
value=$(ip a | awk '/: eth0/{found=1} found && /inet/ && !count{match($2,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/);val=substr($2,RSTART,RLENGTH);sub(/[0-9]+\//,"0/",$2);print substr($2,RSTART,RLENGTH);count=1}')
输出如下。
10.128.0.0/32
关于shell - 从 Linux 计算机中提取接口(interface)的网络范围和子网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59649346/