一个提取 ip 地址的衬里,最后一个八位字节替换为 0
one liner to extract ip address with last octet replaced with 0
我有基于 Beaglebone Black 的定制板,
我想提取接口 eth0 的 ip 地址并将第四个八位字节替换为 0.
我正在使用下面的一个衬垫来提取 ip,
ip addr show eth0 | awk '=="inet"{print }'
output : 192.168.2.158/24
Expected output : 192.168.2.0/24
但是我无法使第四个八位字节为 0,我想过使用函数 gsub
但是无法获得正确的组合。 :(
我不想在命令中使用更多管道。
有 suggestion/pointers 吗?
还有其他建议吗?
基于预期输出:替换第四个八位字节。
ip addr show eth0 |awk '/inet / {split(,a,".");split(,b,"/");print a[1] "." a[2] "." a[3] ".0/" b[2]}'
142.133.152.0/25
如果是第三个八位字节:
ip addr show eth0 |awk '/inet / {split(,a,".");print a[1] "." a[2] ".0." a[4] }'
142.133.0.192/25
你还好吗?
ip addr show eth0 | awk '=="inet" {gsub(".[0-9]*/24",".0/24",);print }'
您可以将地址的最后一个八位字节和斜杠替换为 0/
:
ip addr show eth0 | awk '=="inet"{sub(/[0-9]+\//, "0/", ); print }'
和sed
$ ip addr show eth0 | sed -nE '/^\s*inet\b/ s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*//p'
192.168.1.0/24
/^\s*inet\b/
只过滤需要的行
s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*//
捕获数字序列后跟 .
三次,省略下一个数字序列,然后捕获非 space 字符。按要求替换
- 某些版本可能适用于
sed -nr
而不是 sed -nE
我有基于 Beaglebone Black 的定制板,
我想提取接口 eth0 的 ip 地址并将第四个八位字节替换为 0.
我正在使用下面的一个衬垫来提取 ip,
ip addr show eth0 | awk '=="inet"{print }'
output : 192.168.2.158/24
Expected output : 192.168.2.0/24
但是我无法使第四个八位字节为 0,我想过使用函数 gsub
但是无法获得正确的组合。 :(
我不想在命令中使用更多管道。
有 suggestion/pointers 吗?
还有其他建议吗?
基于预期输出:替换第四个八位字节。
ip addr show eth0 |awk '/inet / {split(,a,".");split(,b,"/");print a[1] "." a[2] "." a[3] ".0/" b[2]}'
142.133.152.0/25
如果是第三个八位字节:
ip addr show eth0 |awk '/inet / {split(,a,".");print a[1] "." a[2] ".0." a[4] }'
142.133.0.192/25
你还好吗?
ip addr show eth0 | awk '=="inet" {gsub(".[0-9]*/24",".0/24",);print }'
您可以将地址的最后一个八位字节和斜杠替换为 0/
:
ip addr show eth0 | awk '=="inet"{sub(/[0-9]+\//, "0/", ); print }'
和sed
$ ip addr show eth0 | sed -nE '/^\s*inet\b/ s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*//p'
192.168.1.0/24
/^\s*inet\b/
只过滤需要的行s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*//
捕获数字序列后跟.
三次,省略下一个数字序列,然后捕获非 space 字符。按要求替换- 某些版本可能适用于
sed -nr
而不是sed -nE