我正在尝试获取 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
这比使用grep
and更容易做到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 私有地址。