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
-n
informased
a 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. -
p
sed comando para imprimir a linha atual (editada) ("espaço de padrão" na terminologiased
). -
q
Saia 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.