Um pouco de regex confuso para sed, mas viável
sed '
:a #mark return point
s/\(\(^\|)\)[^(]\+\);\s*\([^)]\+\((\|$\)\)/\n/ #remove ; between ) and (
ta #repeat if substitute success
s/[[:blank:];]\+$// #remove ; with spaces at end
'
Explicação de regex de Breif:
-
^\|)
do início da linha ou)
-
[^(]\+
de quaisquer símbolos, mas(
-
;\s*
ponto-e-vírgula com espaço (s) possível (s) -
(\|$
até o final da linha ou(