Sed

來自 ip addr show 的 Grepping 和 sedding IP

  • March 18, 2019

我正在嘗試獲取 Arch VM 的本地 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,它什麼也沒給我。我認為我的正則表達式有問題。

awk這比grep和更容易做到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 私有地址。

引用自:https://unix.stackexchange.com/questions/246127