Extraindo IP de IP.port

0

Eu fiz muita pesquisa, mas não encontrei uma resposta para o meu problema.

Atualmente, tenho o seguinte comando:

# netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}'

Que retorna algo como:

192.168.15.73.64759

A partir disso, quero obter apenas o IP sem a porta. Então,

192.168.15.73

O sistema em que estou fazendo está executando uma variante unix integrada e não suporta -o como uma opção para o grep. O sistema supõe sed que provavelmente é a melhor rota, mas eu não estou familiarizado com essa aplicação.

Alguém pode me dizer o que eu poderia adicionar para obter a saída que estou procurando?

    
por Trey 02.08.2017 / 19:57

5 respostas

2

Você pode usar cut ou sed :

echo 192.168.15.73.64759 | cut -d '.'  -f 1-4 
echo 192.168.15.73.64759 | sed -E 's,\.[0-9]+$,,'

Ou awk :

echo 192.168.15.73.64759 | awk -F '.' '{print $1"."$2"."$3"."$4}'
    
por 02.08.2017 / 20:02
1

Tendo apenas aprendido sobre ss :

ss -n -o state established '( dport = :telnet or sport = :ssh )' | 
  awk  'NR==2 { print substr($5, 1, index($5, ":")-1) }'

Eu uso NR == 2 para pular o cabeçalho e pegar apenas a primeira linha de saída, para corresponder ao seu comportamento netstat / grep. O resto do código awk imprime $ 5, mas a partir do primeiro caractere e indo somente até o índice onde ":" é encontrado, menos um.

Se o sistema estiver faltando ss , você poderá usar sed:

echo 192.168.15.73.64759 | sed 's/\.[0-9]*$//'

netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' | sed 's/\.[0-9]*$//'

Isso substitui "período seguido por zero ou mais dígitos seguidos pelo final da linha" por "nada".

    
por 02.08.2017 / 20:08
0
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' |grep -Po "\b(?:\d{1,3}\.){3}\d{1,3}\b"
    
por 02.08.2017 / 20:11
0

Você também pode fazer isso usando grep -E

in="192.168.15.73.64759"

echo $in | grep -Eo "([[:digit:]]{1,3}\.){4}" | grep -Po "(.*)(?=\.$)

~#: 192.168.15.73

o -E permite regex estendido e -P para Perl compatível para incluir o último ponto no padrão mas excluindo-o da saída

    
por 02.08.2017 / 22:27
0

Use a substituição de string:

$ IP=192.168.15.73.64759
$ echo ${IP%.*}
192.168.15.73
IP=$(netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}')
echo ${IP%.*}
    
por 02.08.2017 / 20:02