comando para extrair apenas números de uma saída

comando para extrair apenas números de uma saída

ssh para o dispositivo remoto e puxando o contador de perda de pacotes.

$ ssh [email protected] cat /proc/net/pf_ring/*eth0* | grep -E "Tot Pkt Lost" 

Saída do comando acima:

Tot Pkt Lost       : 1083761951

Preciso de um comando que extraia apenas números perdidos do Tot Pkt.

Responder1

Se você tiver GNU grep, você pode fazer:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    grep -oP 'Tot Pkt Lost\s*:\s*\K\d+'
1083761951

Mas awkpode ser mais simples e portátil aqui:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    awk '/Tot Pkt Lost/{print $NF}'
1083761951

Responder2

Não há necessidade de usar -Ewith grepnesse caso, pois você não usa uma expressão regular estendida. Você também expande o padrão globbing na máquina local em vez de no sistema remoto, o que pode gerar resultados errados.

Seu comando deve, portanto, ser reescrito como

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost'

Estou usando -Fwith grepaqui porque estou combinando com uma string, não com uma expressão regular. Também estou citando o comando que deve ser executado no host remoto para que o padrão global seja expandido lá, não localmente.

Isso deve fornecer a mesma saída:

Tot Pkt Lost       : 1083761951

Para obter apenas dígitos disso, basta passá-lo grep -E -o '[[:digit:]]+':

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost' |
grep -E -o '[[:digit:]]+'

Alternativamente, com sed:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
sed -n 's/^Tot Pkt Lost.*: //p'

Isso corresponderia à Tot Pkt Loststring no início de cada linha e depois dela. Isso excluiria a string correspondente e imprimiria o restante da linha. Todos os outros dados são descartados.

informação relacionada