Para bash você pode usar a expansão de parâmetros
result=${dc_list#*$TEST_VENUE\":\"}
result=${result%%\"*}
Eu tenho duas variáveis $ dc_list e $ TEST_VENUE. Se eu fizer eco no bash
echo $dc_list
{"active-production-dc":"sc-va1","standby-production-dc":"sc-tx2","active-integration-dc":"int-va1","standby-integration-dc":"int-tx3"}
e
echo $TEST_VENUE
standby-production-dc
Agora preciso buscar o valor de TEST_VENUE de dc_list.
Eu tentei isso:
dc=$(echo "$dc_list" | sed -e 's/^.*'"$TEST_VENUE"':"\([^"]*\)".*$//') ---> This is not working
Mas se eu codificar,
dc=$(echo "$dc_list" | sed -e 's/^.*"standby-production-dc":"\([^"]*\)".*$//') ---> This works.
Mas eu quero alcançar a partir do primeiro sed. Alguma sugestão para isso?
Para bash você pode usar a expansão de parâmetros
result=${dc_list#*$TEST_VENUE\":\"}
result=${result%%\"*}
Isso funciona para mim:
tr '"' _ <<< $dc_list | sed -n "s/.*${TEST_VENUE}_:_\([^_]*\).*//p"
No entanto, meu conselho seria não usar isso, especialmente se o formato do $dc_list
for alterado.
Eu recomendo usar um analisador json. Eu usaria algo como a função PHP json_decode (), mas obviamente existem outras alternativas algo de bom também.
Este exemplo de uso do json_decode()
do PHP funciona para mim e seria muito mais confiável, é claro que ele pressupõe que você tenha um PHP cli SAPI disponível para você.
Você poderia usar este código diretamente no seu script de shell, eu testei usando o zsh, mas eu espero que funcione para o bash também.
<< 'EOF' php -- "$dc_list" "$TEST_VENUE"
<?php
$a = json_decode($argv[1]);
echo $a->{$argv[2]} . PHP_EOL;
EOF
Para dados JSON, use um analisador JSON, como jq
$ jq -r ".[\"$TEST_VENUE\"]" <<< "$dc_list"
sc-tx2