有沒有一種簡單的方法來以程式方式提取 IP 地址?
有沒有一種簡單的方法來以程式方式提取 IP 地址,而無需繁瑣的解析
ifconfig
?我不介意簡單的命令輸出處理sed
用於執行此操作,但不處理來自/etc
某個地方的多行文件。我要做的是修改我.bashrc
的以在問候消息中顯示主機的 IP 地址。我正在使用Ubuntu 12.04
但決定在這里而不是 Ubuntu 論壇發帖,因為我認為這不是特定於發行版的。
筆記
- NIC 設備句柄
下面的範例假設網路介面是名為 的無線網卡
wlan0
。在範例中針對您的特定情況調整此位。例如,如果它是有線 NIC 卡,那麼它很可能是eth0
. 2. IPv4 -(網際網路協議版本 4)這些範例也返回 IPv4 地址。大多數人認為是他們的“IP 地址”的“虛線四邊形”。
例如:
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
- IPv6 -(網際網路協議版本 6)
如果您的系統配置為支持 IPv6,您將在輸出中看到“點四邊形”以及 IPv6 IP 地址
ifconfig
。例如:
inet6 addr: fe80::226:c7ff:fe85:a720/64 Scope:Link
下面的命令明確忽略了這一點,但可以很容易地調整以獲取此資訊。
解決方案(使用
ifconfig
)有很多方法可以做到這一點。例如,您可以使用此
awk
腳本解析出無線 LAN NIC (wlan0) 的 IP 地址:$ ifconfig wlan0 | grep "inet " | awk -F'[: ]+' '{ print $4 }' 192.168.1.20
您可以這樣做並使其更緊湊:
$ ifconfig wlan0 | awk '/t addr:/{gsub(/.*:/,"",$2);print$2}' 192.168.1.20
您也可以使用
perl
:$ ifconfig wlan0 | perl -nle'/t addr:(\S+)/&&print$1' 192.168.1.20
Perl 範例盡可能緊湊。
有無數其他方法可以做到這一點,這些只是幫助您入門的幾個範例。
編輯#1
一些額外的註釋和評論。@StephaneChazelas 證明有一個更緊湊的版本使用
grep
:$ ifconfig wlan0|grep -Po 't addr:\K[\d.]+' 192.168.1.20
此解決方案利用
grep
’ 在較新版本中使用 PCRE(Perl 正則表達式)的能力,以及它的-o
開關以返回與正則表達式匹配的內容。解決方案(使用
ip
)正如評論中還提到的那樣,在將
ifconfig
多個 IP 地址分配給網路設備的系統上使用可能會很麻煩,因為它只返回第一個。所以ip
在這些情況下最好使用該命令。例如:
$ ip addr show wlan0 | grep -Po 'inet \K[\d.]+' 192.168.1.20
您還可以告訴
ip
您只顯示給定網路介面的 IPv4 資訊。在這種情況下,我們只查看名為的介面wlan0
:$ ip -f inet addr show wlan0 | grep -Po 'inet \K[\d.]+' 192.168.1.20
參考