Com GNU sed , que suporta substituição de todas as ocorrências de contagem particular
$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh |
sed -E 's/"/\"/2g; s/\("[^"]*)$//'
label="123 \"456\" 789\" \"AB C" e f gh
Todos " (espera primeiro " ) são substituídos por \" e, em seguida, \ é removido do último \"
Se GNU sed não estiver disponível, remova \ do primeiro \" também
$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh |
sed -E 's/"/\"/g; s/\"/"/; s/\("[^"]*)$//'
label="123 \"456\" 789\" \"AB C" e f gh
Observação: algumas versões sed podem precisar de -r em vez de -E
Com perl
$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh |
perl -pe 's/(^[^"]*"|"[^"]*$)(*SKIP)(*F)|"/\"/g'
label="123 \"456\" 789\" \"AB C" e f gh
Aqui, a string até o primeiro " e a string do último " até o final da linha são ignorados enquanto os " restantes são substituídos por \"