Security

將外部 IP 放入變數 - grep 操作失敗

  • December 12, 2017

我需要將我的 VPS 機器的 IP 放入一個變數中。我的意思是inet addrifconfig輸出中出現部分值的外部 IP 地址。

我試過了:

ipa="$(hostname -i)"

但是echo ${ipa}帶來了 localhost token: 127.0.1.1,所以我尋找了其他解決方案,我發現的所有解決方案都包括許多awk我一無所知的管道和操作(從未使用過awk,我對正則表達式也不是很熟悉)。

我試過這個:

ipa=$(ifconfig | grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]")

但它失敗了,因為它echo ${ipa}有一個空的輸出行。

為什麼我嘗試過的失敗了,或者至少你將如何解決它?

ipa=$(ifconfig | perl -lane '/inet addr:(\S+)/ and $1 !~ "^127" and print $1')

另請參閱此處以獲取大量替代方案。例如使用grep

ipa=$(ifconfig | grep -Po 'inet addr:\K[^\s]+' | grep -v '^127')

解釋:

ipa=$( )將括號中的命令輸出分配給變數ipa

ifconfigshow interfaces 及其地址。您可能更喜歡ip address

| grep -Po 'inet addr:\K[^\s]+'使用perl兼容的正則表達式過濾輸出,再次列印匹配的文本

| grep -v '^127'過濾器,這次排除以 ( ) 開頭的 ( )-v^``127


要獲取我的外部 IP,我通常會這樣做:

dig +short myip.opendns.com @resolver1.opendns.com

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