La primera tarea es extraer la tasa de esa línea. Con GNU grep (Linux no integrado o Cygwin), puede usar la -o
opción. La parte que desea es la que contiene solo dígitos, seguida de un %
signo. Si no desea extraer el %
propio, necesita un truco adicional: una aserción anticipada de ancho cero , que no coincide con nada, pero solo si no se sigue nada %
.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
Otra posibilidad es usar sed. Para extraer una parte de una línea en sed, use el s
comando, con una expresión regular que coincida con la línea completa (comenzando ^
y terminando con $
), con la parte para retener en un grupo ( \(…\)
). Reemplace toda la línea por el contenido de los grupos que desea conservar. En general, pase la -n
opción de desactivar la impresión predeterminada y coloque el p
modificador para imprimir líneas donde haya algo que extraer (aquí hay una sola línea, por lo que no importa). Consulte Devolver solo la parte de una línea después de un patrón coincidente y Extraer una expresión regular combinada con 'sed' sin imprimir los caracteres circundantes para obtener más trucos sed.
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
Más flexible de nuevo que sed, es awk. Awk ejecuta instrucciones para cada línea en un pequeño lenguaje imperativo. Hay muchas formas de extraer la tasa aquí; Selecciono los segundos campos (los campos están delimitados por espacios en blanco de forma predeterminada) y elimino todos los caracteres que no son un dígito.
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
El siguiente paso, ahora que ha extraído la tasa, es pasarla como argumento a command2
. La herramienta para eso es una sustitución de comandos . Si coloca un comando dentro $(…)
(paréntesis dólar), su salida se sustituye en la línea de comando. La salida del comando se divide en palabras separadas en cada bloque de espacios en blanco, y cada palabra se trata como un patrón comodín; a menos que usted quiere que esto suceda, ponga comillas alrededor de la sustitución de comandos: "$(…)"
. Con las comillas dobles, la salida del comando se usa directamente como un parámetro único (la única transformación es que se eliminan las nuevas líneas al final de la salida).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"