A primeira tarefa é extrair a taxa dessa linha. Com o GNU grep (Linux ou Cygwin não incorporado), você pode usar a -o
opção A parte que você deseja é aquela que contém apenas dígitos e seguida por um %
sinal. Se você não deseja extrair o %
próprio, precisará de um truque adicional: uma asserção lookahead de largura zero , que não corresponde a nada, mas apenas se esse nada for seguido por %
.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
Outra possibilidade é usar o sed. Para extrair uma parte de uma linha no sed, use o s
comando, com um regex que corresponda à linha inteira (iniciando ^
e terminando com $
), com a parte a ser mantida em um grupo ( \(…\)
). Substitua a linha inteira pelo conteúdo do (s) grupo (s) a manter. Em geral, passe a -n
opção de desativar a impressão padrão e coloque o p
modificador para imprimir linhas onde houver algo a extrair (aqui há uma única linha para que isso não importe). Consulte Retornar apenas a parte de uma linha após um padrão correspondente e Extraindo uma regex correspondente a 'sed' sem imprimir os caracteres ao redor para obter mais truques de sed.
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
Mais flexível do que sed, é estranho. O Awk executa instruções para cada linha em uma pequena linguagem imperativa. Existem muitas maneiras de extrair a taxa aqui; Seleciono os segundos campos (os campos são delimitados por espaço em branco por padrão) e removo todos os caracteres que não são um dígito.
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
O próximo passo, agora que você extraiu a taxa, é passá-la como argumento para command2
. A ferramenta para isso é uma suspeita de comando . Se você colocar um comando dentro $(…)
(parênteses em dólar), sua saída será substituída na linha de comando. A saída do comando é dividida em palavras separadas em cada bloco de espaço em branco e cada palavra é tratada como um padrão curinga; a menos que você quer que isso aconteça, coloque aspas em torno da substituição de comando: "$(…)"
. Com aspas duplas, a saída do comando é usada diretamente como um único parâmetro (a única transformação é que as novas linhas no final da saída são removidas).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"