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}'
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?
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".
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' |grep -Po "\b(?:\d{1,3}\.){3}\d{1,3}\b"
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
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%.*}
Tags sed regular-expression