在 bash 中获取接口的子网以获取 ip 路由

在 bash 中获取接口的子网以获取 ip 路由

从该ip addr命令中,我获得了 类型的子网地址,192.168.0.1/24但该ip route命令需要类型为 的子网地址192.168.0.0/24

如果我尝试使用sed -E 's/(?<=\d.)1(?=\/)/0/g'将最后一个“1”更改为“0”,则会收到错误:sed: -e expression #1, char 21: Invalid preceding regular expression

答案1

问题是 sed 不支持 PCRE 语法。试试这个 GNU sed 片段:

sed -r 's:([0-9]\.)[0-9]{1,3}/:\10/:g'

如果-r不接受,请使用-E.

答案2

我最终使用 Perl 而不是 sed,因为 sed 不支持前向和后向,正如@seshoumara 指出的那样。

ip -o -f inet addr show eth0 | awk '/scope global/ {print $4}' | perl -ne 's/(?<=\d.)\d{1,3}(?=\/)/0/g; print;'

相关内容