comando para extraer solo números de una salida

comando para extraer solo números de una salida

ssh al dispositivo remoto y extrayendo el contador de pérdida de paquetes.

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

Salida del comando anterior:

Tot Pkt Lost       : 1083761951

Necesito un comando que extraiga solo los números perdidos de Tot Pkt.

Respuesta1

Si tienes GNU grep, puedes hacer:

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

Pero awkaquí podría ser más simple y más portátil:

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

Respuesta2

No es necesario utilizar -Ewith grepen ese caso ya que no se utiliza una expresión regular extendida. También expande el patrón global en la máquina local en lugar de en el sistema remoto, lo que puede generar resultados incorrectos.

Por lo tanto, su comando debe reescribirse como

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

Estoy usando -Faquí grepporque estoy haciendo coincidir una cadena, no una expresión regular. También cito el comando que debe ejecutarse en el host remoto para que el patrón global se expanda allí, no localmente.

Esto debería darte el mismo resultado:

Tot Pkt Lost       : 1083761951

Para obtener solo dígitos de esto, simplemente páselo por grep -E -o '[[:digit:]]+':

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

Alternativamente, con sed:

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

Esto coincidiría con la Tot Pkt Lostcadena al principio de cada línea y la siguiente. Eliminaría la cadena coincidente e imprimiría el resto de la línea. Todos los demás datos se descartan.

información relacionada