外部IPを変数に入れます - grep操作が失敗しました。

外部IPを変数に入れます - grep操作が失敗しました。

私のVPSマシンのIPを変数に入れる必要があります。私は、外部IPアドレスが出力値inet addrの一部として表示されることです。ifconfig

私は試した:

ipa="$(hostname -i)"

しかしecho ${ipa}、これによりlocalhost token:が発生した127.0.1.1ために別の解決策が見つかりましawkawk

私はこれを試しました:

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

ただし、出力は空行なのでecho ${ipa}失敗します。

私が試したのはなぜ失敗しましたか?それとも、少なくともどのように修正しますか?

答え1

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=$( )括弧内のコマンド出力をshowinterfaces変数ipa
ifconfigとそのアドレスに割り当てます。ip address
| grep -Po 'inet addr:\K[^\s]+'互換性のある正規表現を使用して出力をフィルタリングしperl、一致するテキストフィルタを再印刷することをお勧めします
| grep -v '^127'。今回は-v()で始まる^値を除外します。127


外部IPを取得するには、通常、次のようにします。

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

答え2

grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]"

inet addr:これは、文字列の後にto、a、またはaの数字である単一文字、その後にドットが続き、toまたはorの他の文字が続く文字列と一致しますが、たとえば一致しません。09990999inet addr:1.2.3.4inet addr:11.22.33.44

角かっこグループは、数値を構成する文字列と一致せず、単一の文字のみを一致します。

関連情報