Eu usaria uma série de comandos sed com alguns truques:
para substituir a primeira linha e marcar um ponto de partida, faça uma substituição na linha
sed -i 's/"topics": \[\],/"topics": \[/g' file.out
adicione novamente o final dessa linha e formato originais com quatro espaços pré-definidos
sed -i '/"topics": \[/a\ \ \ \ \],' file.out
crie um array a partir do seu outro arquivo
IFS=$'\n'
topic=( $(sed -n '/^Topic/p' file.in) )
unset IFS
depois, na ordem inversa da matriz, preencha os espaços entre os dois primeiros seds
for (( i=${#topic[@]}-1 ; i>=0 ; i-- )); do sed -E -i '/"topics": \[/a\ \ \ \ {"topic":"'"${topic[$i]}"'},' file.out; done
a saída é exata (salvar para uma única vírgula):
# topics-to-move.json
{
"topics": [
{"topic":"Topic..A"},
{"topic":"Topic..B"},
{"topic":"Topic..C"},
],
"version": 1
}