Shell 从Linux计算机提取接口的网络范围和子网

Shell 从Linux计算机提取接口的网络范围和子网,shell,awk,sed,scripting,grep,Shell,Awk,Sed,Scripting,Grep,预期产量 10.128.0.0/32 注意:- ip地址最后一个八位字节不止一个数字,例如,最后一个八位字节可以是最少一个数字,最多三个数字 ip a | grep ": eth0" -A 2 | grep inet | awk '{print $2}' 10.128.0.6/32 因此,基本上我们需要用“\”之间的字符串替换“0”请尝试以下内容(因为OP提到的ip a命令没有示例,所以无法测试它) 编辑:根据OP的要求,添加一个线性形式的解决方案,该解决方案也会将值保存到变量中: 10.1

预期产量

10.128.0.0/32

注意:- ip地址最后一个八位字节不止一个数字,例如,最后一个八位字节可以是最少一个数字,最多三个数字

ip a | grep ": eth0" -A 2 |  grep inet | awk '{print $2}'
10.128.0.6/32

因此,基本上我们需要用“\”之间的字符串替换“0”

请尝试以下内容(因为OP提到的
ip a
命令没有示例,所以无法测试它)

编辑:根据OP的要求,添加一个线性形式的解决方案,该解决方案也会将值保存到变量中:

10.128.0.6
10.128.0.16
10.128.0.116
输出如下

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}')

像这样只提取ip:

10.128.0.0/32
这样可以满足所有要求:

ip -o a | grep -oP "eth0\s+inet\s+\K\d+\.\d+\.\d+\.\d+/\d+"

\.[0-9]+/
模式非常独特,您可以将其替换为
.0/
,例如通过
sed
。但请记住,当掩码不是8的倍数时,您将很难屏蔽位。。无论您试图实现什么..我需要NFS导出的网络范围和子网,每次新的NFS部署都应该正确地选择网络范围和子网
echo/NFS 10.128.0.0/32(rw,sync,no_root\u squash,no_all\u squash)”;sudo tee-a/etc/exports
$ip-oa;grep-oP“eth0\s+inet\s+\K\d+.\d+.\d+\d+\d+“10.128.0.6/32但它不会将IP地址的最后八位字节替换为“0”
ip -o a | grep -oP "eth0\s+inet\s+\K\d+\.\d+\.\d+\.\d+/\d+"
ip -o a |
  perl -lne 'print "${1}0${2}" if m!enp0s31f6\s+inet\s+(\d+\.\d+\.\d+\.)\d+(/\d+)!'