Sed
來自 ip addr show 的 Grepping 和 sedding IP
我正在嘗試獲取 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 私有地址。