📄 math.sed
字号:
## @(#)math.sed 8.1 (Berkeley) 6/6/93## Addition and multiplication in sed.# ++ for a limited time only do (expr) too!!!## Kevin S Braunsdorf, PUCC UNIX Group, ksb@cc.purdue.edu.## Ex:# echo "4+7*3" | sed -f %f# make sure the expression is well formeds/[ ]//g/[+*\/-]$/{ a\ poorly formed expression, operator on the end q}/^[+*\/]/{ a\ poorly formed expression, leading operator q}# fill hold space with done tokenxs/^.*/done/x# main loop, process operators (*, + and () ): loop/^\+/{ s/// b loop}/^\(.*\)(\([^)]*\))\(.*\)$/{ H s//\2/ x s/^\(.*\)\n\(.*\)(\([^()]*\))\(.*\)$/()\2@\4@\1/ x b loop}/^[0-9]*\*/b mul/^\([0-9]*\)\+\([0-9+*]*\*[0-9]*\)$/{ s//\2+\1/ b loop}/^[0-9]*\+/{ s/$/=/ b add}x/^done$/{ x p d}/^()/{ s/// x G s/\(.*\)\n\([^@]*\)@\([^@]*\)@\(.*\)/\2\1\3/ x s/[^@]*@[^@]*@\(.*\)/\1/ x b loop}i\help, stack problempxpq# turn mul into add until 1*x -> x: mul/^0*1\*/{ s/// b loop}/^\([0-9]*\)0\*/{ s/^\([0-9]*\)0\*\([0-9]*\)/\1*\20/ b mul}s/^\([0-9]*\)1\*/\10*/s/^\([0-9]*\)2\*/\11*/s/^\([0-9]*\)3\*/\12*/s/^\([0-9]*\)4\*/\13*/s/^\([0-9]*\)5\*/\14*/s/^\([0-9]*\)6\*/\15*/s/^\([0-9]*\)7\*/\16*/s/^\([0-9]*\)8\*/\17*/s/^\([0-9]*\)9\*/\18*/s/\*\([0-9*]*\)/*\1+\1/b mul# get rid of a plus term until 0+x -> x: add/^\+\([0-9+*]*\)=/{ s//\1/ b loop}/^\([0-9*]*\)\+=/{ s//\1/ b loop}/^\([0-9]*\)\+\([0-9*+]*\)\+=/{ s//\2+\1/ b loop}/^\([0-9]*\)0\+\([0-9]*\)\([0-9]\)=/{ s//\1+\2=\3/ b add}/^\([0-9]*\)\([0-9]\)\+\([0-9]*\)0=/{ s//\1+\3=\2/ b add}/^\([0-9]*\)0\+\([0-9*+]*\)\+\([0-9]*\)\([0-9]\)=/{ s//\1+\2+\3=\4/ b add}/^\([0-9]*\)\([0-9]\)\+\([0-9*+]*\)\+\([0-9]*\)0=/{ s//\1+\3+\4=\2/ b add}s/^\([0-9]*\)1\+/\10+/s/^\([0-9]*\)2\+/\11+/s/^\([0-9]*\)3\+/\12+/s/^\([0-9]*\)4\+/\13+/s/^\([0-9]*\)5\+/\14+/s/^\([0-9]*\)6\+/\15+/s/^\([0-9]*\)7\+/\16+/s/^\([0-9]*\)8\+/\17+/s/^\([0-9]*\)9\+/\18+/s/9=\([0-9]*\)$/_=\1/s/8=\([0-9]*\)$/9=\1/s/7=\([0-9]*\)$/8=\1/s/6=\([0-9]*\)$/7=\1/s/5=\([0-9]*\)$/6=\1/s/4=\([0-9]*\)$/5=\1/s/3=\([0-9]*\)$/4=\1/s/2=\([0-9]*\)$/3=\1/s/1=\([0-9]*\)$/2=\1//_/{ s//_0/ : inc s/9_/_0/ s/8_/9/ s/7_/8/ s/6_/7/ s/5_/6/ s/4_/5/ s/3_/4/ s/2_/3/ s/1_/2/ s/0_/1/ s/\+_/+1/ /_/b inc}b add
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -