从sed replace a variable of power by the product of two variables,我想把“幂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'
如果somenone有其他工具(其他Linux命令)的解决方案,我将使用。
发布于 2015-06-15 07:23:40
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本身的极限。发布于 2015-06-14 04:51:02
#!/usr/bin/awk -f
BEGIN {
RS = "[ \n+]"
FS = "^"
OFS = "*"
}
{
z = $2
for (y=2; y<=z; y++)
$y = $1
printf "%s%s", $0, RT
}
输入
sin(b)
cos(a)^3 +m1^4
tan(c)
输出
sin(b)
cos(a)*cos(a)*cos(a) +m1*m1*m1*m1
tan(c)
https://stackoverflow.com/questions/30825196
复制相似问题