Para obter com mais eficiência apenas value_of_token da saída do comando curl , canalize a saída para um único comando sed (editor de fluxo). Use a substituição do comando $() para armazenar a saída em uma variável do shell:
token=$(curl ... | sed -n '/ *"token": *"/ { s///; s/".*//; p; }')
Em seguida, você pode fazer referência à variável token como um parâmetro para o segundo comando curl :
curl ... token="$token"
Explicação do comando sed :
sed -n '/ *"token" *: *"/ { s///; s/".*//; p; q; }'
-
A opção
-ninformaseda não imprime todas as linhas de entrada -
/ *"token" *: *"/endereça a linha que contém o valor. Esse padrão (expressão regular) corresponde ao começo inteiro da linha, até e incluindo as primeiras aspas duplas que delimitam o valor do token. -
{inicia um bloco de comando que será aplicado ao linha endereçada. -
s///;um comando sed para excluir o que foi correspondido anteriormente (no parte do endereço). A linha ("espaço de padrão") agora se parece com:value_of_token" -
s/".*//sed comando para excluir as aspas duplas restantes (") e tudo depois. -
psed comando para imprimir a linha atual (editada) ("espaço de padrão" na terminologiased). -
qSaia imediatamente do script sed sem processar mais entradas -
'}' termina o bloco de comando.
Por exemplo,
$ echo '
{
"token": "value_of_token"
}
' | sed -n '/ *"token" *: *"/ { s///; s/".*//; p; }'
value_of_token
$
Este método é muito mais eficiente do que o encadeamento de outros 4 comandos para obter o mesmo resultado. Este comando sed assume que não há caracteres de tabulação na entrada JSON. Se as guias existirem, o comando sed exigirá modificações.