외부 IP를 변수에 넣습니다 - grep 작업이 실패했습니다.

외부 IP를 변수에 넣습니다 - grep 작업이 실패했습니다.

내 VPS 머신의 IP를 변수에 넣어야 합니다. 내 말은 외부 IP 주소가 출력 값 inet addr의 일부로 표시된다는 것입니다.ifconfig

나는 시도했다:

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}실패합니다 .

내가 시도한 것이 왜 실패했습니까? 아니면 적어도 어떻게 고치겠습니까?

답변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

대괄호 그룹은 숫자를 구성하는 문자열과 일치하지 않고 단일 문자만 일치합니다.

관련 정보