来自sed replace a variable of power by the product of two variables,我想概括一下" power 2"案例到" N电源案例"。
" power 2"中的命令行案例是:
sed 's/\([^(*+\/^-]*\(([^)]*)\)\?\)\^2/\1\*\1/g'
那样
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)
现在,我想改造:
cos(a)^3 +m1^4
到
cos(a)*cos(a)*cos(a)+m1*m1*m1*m1
有没有办法存储指数" N"并打印N次变量驱动with star symbol
?
这将是这样的(我们将指数存储在模式\2
中):
sed 's/\([^(*+\/^-]*\(([^)]*)\)\?\)\^\([0-9]*\)/
"打印N次(pattern \2
)因子\1
"
\1\*\1*\1*\1 /g'
如果某人没有其他工具(其他Linux命令)的解决方案,我会接受。
答案 0 :(得分:3)
sin(b)
cos(a)^3 +m1^4
tan(c)
输入
sin(b)
cos(a)*cos(a)*cos(a) +m1*m1*m1*m1
tan(c)
输出
B(): b(9), A(foo()) { }
答案 1 :(得分:1)
echo "cos(a)^3 +m1^4" | sed '
# encapsulate between +
s/.*/+&+/
:a
# For each power object
/\^/!b end
# isolate power object
h
s#\(.*[-+/*^]\)\([^-+/*^]*\)^\([0-9]\{1,2\}\)\(.*\)#\1\
\2\
\4#
# isolate power value to convert it in useable reproducing factor
x
s//00\3/
s/\(.\)\{0,1\}\(.\)\{0,1\}\(.\)\{0,1\}/\1C\2D\3/
s/0.//g;s/9/18/g;s/8/17/g;s/7/16/g;s/6/15/g;s/5/14/g;s/4/13/g;s/3/12/g;s/2/11/g;s/1/U/g
:cdu
s/1\(1*\)\([^1]\)/\2\1\2/g;t cdu
s/C/DDDDDDDDDD/g;s/D/UUUUUUUUUU/g
# dont replicate power 1
s/U//
# we got the replication number
# replicate
G
:repl
s/^U\(U*\n.*\n\)\(.*\)\(\n\)\(.*\)/\1\2\3*\2\4/;t repl
# reassemble
s/\n//g
b a
:end
# remove extra +
s/.\(.*\)./\1/
'
让我们在这个疯狂的世界中疯狂(我不会在生产中推荐这个,尤其是维护和修改)
+-*/^
之间几乎所有简单的有力参数都应该达到sed本身的极限。