Colocando IP externo em uma variável - operação grep falhou [duplicado]

1

Eu preciso colocar o IP da minha máquina VPS em uma variável. Quero dizer, para o endereço IP externo que aparece o valor da seção inet addr , em ifconfig output.

Eu tentei:

ipa="$(hostname -i)"

Mas echo ${ipa} trouxe o token localhost: 127.0.1.1 , então procurei outras soluções e tudo o que encontrei inclui muitos pipes e awk de operações das quais não sei nada (nunca usei awk e não sou muito familiarizado com a regex).

Eu tentei isso:

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

Mas falhou, pois echo ${ipa} tem uma linha vazia de saída.

Por que o que eu tentei falhou ou pelo menos como você resolveu isso?

    
por JohnDoea 12.12.2017 / 11:41

2 respostas

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

Veja também aqui para uma infinidade de alternativas. Por exemplo. usando grep :

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

Explicação:

ipa=$( ) atribui a saída do comando entre parênteses à variável ipa
ifconfig show interfaces e seus endereços. Você pode preferir a saída do filtro ip address e | grep -Po 'inet addr:\K[^\s]+' usando uma regex compatível com perl , imprima o texto correspondente novamente | grep -v '^127' filter, desta vez excluindo os valores ( -v ) iniciados ( ^ ) com 127

Para obter meu ip externo, geralmente faço:

dig +short myip.opendns.com @resolver1.opendns.com
    
por 12.12.2017 / 12:12
1
grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]"

Isso corresponderia à sequência inet addr: seguida por um único caractere que é um dígito de 0 a 9 , ou 9 ou 9 , seguido por um ponto, depois outro caractere que é 0 para 9 ou 9 ou 9 ... por ex. inet addr:1.2.3.4 , mas não inet addr:11.22.33.44 .

Os grupos de colchetes não correspondem a cadeias de caracteres que formam números, apenas caracteres únicos.

    
por 12.12.2017 / 14:28