Isso deve ser feito:
sed 's/Complex(\([^,]*\), *\([^)]*\))/( + i*)/g;
s/Power(\([^,]*\), *\([^)]*\))/^/g' file
Isso não funcionará para instruções aninhadas como Power(Power(a, b), c) .
Explicação
-
Para substituir os padrões em
sed, use o operador de substituição (s/pattern/replacement/). Ogno final significa global , faz com que a substituição seja aplicada a todas as correspondências. -
Os padrões podem ser capturados e reutilizados posteriormente, colocando-os em parênteses com escape:
\(e %código%. O primeiro desses padrões é\), o segundoetc. -
Para substituir
, eu usoComplex(a, b). Isso significa correspondênciaComplex(\([^,]*\), *\([^)]*\)), em seguida, a cadeia mais longa de caracteres não-Complex(consecutivos (,) é capturada como \ 1, depois uma vírgula única e zero ou mais espaços, depois a cadeia mais longa de não[^,]*caracteres até que o parêntese de fechamento seja encontrado. A coisa toda é substituída por). -
A expressão regular que corresponde ao
( + i*)é essencialmente a mesma.