如何使用sed替换不同权限的变量

时间:2016-08-16 18:15:22

标签: sed

我有一个输入文件:

cat input.m

4 (5 y^7 (-1 + 4 z) + y^6 (15 - 83 z + 80 z^2) - 5 z^4 (-2 + 4 z - 3 z^2
+ z^3)+ y^5 (-20 + 147 z - 273 z^2 + 140 z^3) + y z^3 (40 - 154 z + 147 z^2
- 83 z^3+ 20 z^4) + y^2 z^12 (60 - 254 z + 363 z^2 - 273 z^3 + 80 z^4)
+ y^11 z (40- 254 z + 462 z^2 - 439 z^3 + 140 z^4) + y^4 (10 - 154 z + 363 z^2
- 439 z^3+ 160 z^4)) - 9 (y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^13
+ y^10 (-1+ 4 z) + y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, y) - 9 (y + z)^4 (2
+ y^12 (3 - 9 z)- 4 z + 3 z^2 - z^3 + y^3 (-1 + 4 z) + y (-4 + 12 z - 9 z^2
+ 4 z^3)) H(0, z)+ 36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) + z^2 (6
- 5 z + 3 z^2))H(1, z) + 36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2)
+ z^12 (6 - 5 z+ 3 z^2)) H(2, y))/(216 y z (-1 + y + z)^2 (y + z)^4)

我想替换每次出现的y ^ 2,y ^ 3,... y ^ 13等,以及z ^ 2,z ^ 3,...,z ^ 13等和(y + z) ^ 2,(y + z)^ 3,(y + z)^ 4等(1-yz)^ 2,(1-yz)^ 4等,以便用括号即y ^ 2包含功率 - > y ^ {2},... y ^ 13 - > y ^ {13}等

目前我对每个模式使用简单的sed

g1='y^10'
g11='y^{10}'
sed 's/'$g1'/'$g11'/g' input.m > output.m

然后我必须为每个变量和每个功率重复这个,有没有更短的方法?此外,我想知道如何解决(y + z)^ 4 - > (Y + Z)^ {4}。

3 个答案:

答案 0 :(得分:3)

使用捕获组匹配^后跟数字,以及替换中的反向引用。

sed 's/\^\([0-9][0-9]*\)/^{\1}/g' input.m > output.m

答案 1 :(得分:2)

sed -Ei.bak 's/\^([[:digit:]]+)/^{\1}/g' file

会这样做

注意

-i选项适用于现场编辑,其中将进行.bak扩展名的备份。

修改

sed -Ei.bak 's/\^([1-9][[:digit:]]+)/^{\1}/g' file

bracify只有大于9的力量

答案 2 :(得分:0)

使用Lookbehind正则表达式:

perl -pe 's/\^\K(\d+)/{$1}/g' input.m > output.m

仅更改大于10的力量

perl -pe 's/\^\K([1-9]\d+)/{$1}/g' input.m > output.m

据我所知,sed不支持lookbehind或lookahead regex