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/
). Og
no 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 uso
Complex(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.