sed - 用两个变量的乘积代替幂2的变量

时间:2015-05-20 18:46:51

标签: regex bash sed

我想用sed替换以下表达式:

cos(2*a)^2+sin(3*b)^2+m1^2*m2^2*cos(4*c) 

通过

cos(2*a)*cos(2*a)+sin(3*b)*sin(3*b)+m1*m1*m2*m2*cos(4*c) 

正如您所看到的,我希望将这些变量的乘积本身转换为幂2(使用^ 2曝光剂)的所有变量。

我尝试使用符号“^ 2”之前的模式进行操作:

echo "cos(2*a)^2+sin(3*b)^2+m1^2*m2^2*cos(4*c)"  | sed 's/\(.*\)\^2/\1\*\1/g'

但它不起作用。

如果有人可以帮助我......

由于

1 个答案:

答案 0 :(得分:2)

您可以使用角色类:

sed 's/\([^(*+\/^-]*\(([^)]*)\)\?\)\^2/\1\*\1/g'

请注意,如果您有嵌套的括号,这将停止工作。