从 ip addr show 中 Grepping 和 Sedding IP

从 ip addr show 中 Grepping 和 Sedding IP

我正在尝试获取 Arch 虚拟机的本地 IP。我已经设法用 grep 得到包含我想要的内容的行,但我也想用 sed 修剪它。

inet <<192.168.0.16>>/24 brd 192.1680.255 scope global enp0s3 $ I want the IP in <<>>
ip addr show | grep 'inet\ ' | sed -n -e 's/^.*inet\ (.*)\/.*$/\1/p'
-n     # print nothing by default
s      # replacement command
^      # begin line
.*     # anything
inet\  # inet and then a space
(.*)   # capture anything
\/     # end capture at the / that comes before 24
.*     # anything
$      # end
\1     # replace all that with the first capture group which should be the IP
p      # print the output

但是一旦我添加了 sed,它就没有给我任何东西。我认为我的正则表达式有问题。

答案1

awk这比使用grepand更容易做到sed

ip addr show eth0 | awk '/inet / {print $2}'

如果要从 IP 中删除 CIDR 网络掩码:

ip addr show eth0 | awk '/inet / {gsub(/\/.*/,"",$2); print $2}'

请注意,一个接口可能有多个 IP 地址 - 例如,ip addr show br0 | awk '/inet / {print $2}'在我的系统上有 11 个 IPv4 地址,其中一些是公共 IP 地址,一些是 RFC1918 私有地址。

相关内容