varios test terminan solo siguientes regulares regresará que patrones palabra líneas los hacer expresiones exacta egrep doble cuál con comandos buscar anidar linux bash grep

linux - test - ¿Cómo hacer que GREP seleccione solo valores numéricos?



hacer doble grep (6)

Yo uso el comando df en un script bash:

df . -B MB | tail -1 | awk {''print $4''} | grep .[0-9]*

Este script devuelve:

99%

Pero solo necesito números (para hacer la próxima comparación). Si utilizo el grep regex sin el punto:

df . -B MB | tail -1 | awk {''print $4''} | grep .[0-9]*

No recibo nada ¿Como arreglar?


No hay necesidad de usar grep aquí, prueba esto:

df . -B MB | tail -1 | awk {''print substr($5, 1, length($5)-1)''}


No use más comandos de los necesarios, deje la cola, grep y corte. Puedes hacer esto con solo (un simple) awk

PD: dar una impresión de tamaño de bloque solo de persentage es un poco tonto ;-) Así que deja también el "-B MB"

df. | awk -F ''[ separadores de campos múltiples ]'' ''$ NF == "El último campo debe ser exactamente -> patition montado " {print $ (NF- número del último campo )}''

En su caso, utilice:

df . |awk -F''[ %]'' ''$NF=="/" {print $(NF-2)}''

salida: 81

Si desea mostrar el símbolo de porcentaje, puede dejar la -F ''[%]'' lejos y su campo de impresión moverá 1 campo más atrás

df . |awk ''$NF=="/" {print $(NF-1)}''

Salida: 81%


Qué tal si:

df . -B MB | tail -1 | awk {''print $4''} | cut -d''%'' -f1


Si intentas:

echo "99%" |grep -o ''[0-9]*''

Vuelve:

99

Aquí están los detalles de los trabajos de -o (o --only-matching ) de la página de manual de grep .

Imprima solo las partes coincidentes (no vacías) de las líneas coincidentes, con cada una de esas partes en una línea de salida separada. Las líneas de salida utilizan los mismos delimitadores como entrada, y los delimitadores son bytes nulos si también se usa -z (--null-data) (consulte Otras opciones ).


grep imprimirá cualquier línea que coincida con el patrón que proporcione. Si solo desea imprimir la parte de la línea que coincide con el patrón, puede pasar la opción -o :

-o, --only-matching Imprime solo las partes coincidentes (no vacías) de una línea coincidente, con cada una de esas partes en una línea de salida separada.

Me gusta esto:

echo ''Here is a line mentioning 99% somewhere'' | grep -o ''[0-9]+''


function getPercentUsed() { $sys = system("df -h /dev/sda6 --output=pcent | grep -o ''[0-9]*''", $val); return $val[0]; }