繁体   English   中英

如何使用sed替换具有不同功效的变量

[英]How to use sed to replace variables with different powers

我有一个输入文件,内容为:

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}。

使用捕获组来匹配^后跟数字,并在替换中使用后向引用。

sed 's/\^\([0-9][0-9]*\)/^{\1}/g' input.m > output.m
sed -Ei.bak 's/\^([[:digit:]]+)/^{\1}/g' file

会做到的

注意

-i选项用于就地编辑,将在其中进行扩展名为.bak的备份。

编辑

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

bracify只有大于9的权力

使用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正则表达式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM