一个内核提取ip地址,最后一个八位字节替换为0

时间:2016-10-12 07:42:40

标签: bash awk beagleboneblack busybox

我有基于Beaglebone Black的定制板,
我想提取接口eth0的ip地址,并用0替换第四个八位字节 我使用下面的一个班轮来提取ip,

ip addr show eth0 | awk  '$1=="inet"{print $2}'
output : 192.168.2.158/24

Expected output : 192.168.2.0/24

然而我无法使第四个八位位组0,我想到使用函数gsub但是无法获得正确的组合。 :(

我不想在命令中添加更多管道。

有任何建议/指示吗?

还有其他建议吗?

4 个答案:

答案 0 :(得分:3)

根据预期输出:替换第四个八位字节。

ip addr show eth0  |awk '/inet / {split($2,a,".");split($2,b,"/");print a[1] "." a[2] "." a[3] ".0/" b[2]}'
142.133.152.0/25

如果是第3个八位字节:

ip addr show eth0  |awk '/inet / {split($2,a,".");print a[1] "." a[2] ".0." a[4] }'
142.133.0.192/25

答案 1 :(得分:2)

使用sed

$ ip addr show eth0 | sed -nE '/^\s*inet\b/ s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*/\10\3/p'
192.168.1.0/24
  • /^\s*inet\b/仅过滤所需的行
  • s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*/\10\3/捕获数字序列,然后是.三次,省略下一个数字序列,然后捕获非空格字符。根据要求替换
  • 某些版本可能与sed -nr而不是sed -nE
  • 一起使用

答案 2 :(得分:1)

你可以吗?

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.]+)\.crunchyfashion\.com$
RewriteRule ^/(.*)$   http://www.crunchyfashion.com/%1/$1 [L,R] 

答案 3 :(得分:1)

您可以使用0/替换地址的最后一个八位字节和斜杠:

ip addr show eth0 | awk '$1=="inet"{sub(/[0-9]+\//, "0/", $2); print $2}'