Todos esses caracteres têm uma funcionalidade especial, dependendo se um caractere de escape os precede. Isso depende do caractere se uma sequência de escape precedendo o caractere com funcionalidade especial a utiliza (ou seja, um ^
executa uma funcionalidade especial, um \^
não, onde um (
não não executa especial funcionalidade, e um \(
faz.
A expressão que você está procurando é a seguinte
s/\^(\([^)])\))/\^\{\}/g
A expressão literalmente estado, corresponde a um caret seguido por um open_parenthesis seguido por qualquer caractere exceto um close_parenthesis seguido por um close_parenthesis e substitua por aa caret seguido por open_curly_bracket seguido pelo conteúdo encontrado ao pesquisar any_character_except a close_parenthesis (ou seja, o conteúdo entre \(
e \)
) seguido por um close_curly_bracket
Nota: outras abordagens existem também