LinuxShell算术运算

Bash shell 的算术运算有四种方式:
1:使用 expr 外部程式

加法 r=`expr 4 + 5`
echo $r
注意! ‘4’ ‘+’ ‘5’ 这三者之间要有空白
r=`expr 4 * 5` #错误
乘法 r=`expr 4 * 5`

2:使用 $(( ))
r=$(( 4 + 5 ))
echo $r

3:使用 $[ ]

r=$[ 4 + 5 ]
echo $r

乘法
r=`expr 4 * 5`
r=$(( 4 * 5 ))
r=$[ 4 * 5 ]
echo $r

除法
r=`expr 40 / 5`
r=$(( 40 / 5 ))
r=$[ 40 / 5 ]
echo $r

减法
r=`expr 40 – 5`
r=$(( 40 – 5 ))
r=$[ 40 – 5 ]
echo $r

求余数
r=$[ 100 % 43 ]
echo $r

乘幂 (如 2 的 3 次方)
r=$(( 2 ** 3 ))
r=$[ 2 ** 3 ]
echo $r
注:expr

sed详解

最近好好学习了一下sed,发现以前只是学的皮毛。。。按照从a-z的顺序。回忆学习过的命令的用法

[root@mysql1 tmp]# more tmp
a
b
c
d
e
f
g
1. a

在匹配的行后插入一行

[root@mysql1 tmp]# sed ‘/a/ahacker’ tmp
a
hacker
b
c
d
e
f
g

2.b lable   

分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。   

3.c

替换匹配的行

[root@mysql1 tmp]# sed ‘/a/chacker’ tmp
hacker
b
c
d
e
f
g
4. d

删除匹配的行

[root@mysql1 tmp]# sed ‘/a/d’ tmp
b
c
d
e
f
g
5.e

多个表达式,顺序影响结果

[root@mysql1 tmp]# sed -e ‘s/a/b/’ -e ‘s/b/a/’ tmp
a
a
c
d
e
f
g
6. g(G)

从模式空间中取出内容然后附加(G)或者替换(g)匹配的行,稍后跟h一起做实验

7. h

把匹配的行存入模式空间

[root@mysql1 tmp]# sed -e ‘/a/h’ -e ‘$G’ tmp
a
b
c
d
e
f
g
a
8. i

在匹配的行前插入一行

[root@mysql1 tmp]# sed ‘/a/inew line’ tmp
new line
a
b
c
d
e
f
g

9. n

对匹配行的下一行进行操作

 [root@mysql1 tmp]# sed ‘/a/{n;s/b/a/}’ tmp
a
a
c
d
e
f
g

10.p

打印匹配的行

[root@mysql1 tmp]# sed ‘/a/p’ tmp
a
a
b
c
d
e
f
g

11. r

读文件,附加在匹配的行后

[root@mysql1 tmp]# sed ‘/a/r abc’ tmp
a
aaaa
b
c
d
e
f
g
12.s

字符串匹配

[root@mysql1 tmp]# sed ‘s/a/b/’ tmp
b
b
c
d
e
f
g
锚定行的开始 如:/^sed/匹配所有以sed开头的行。   

 $   锚定行的结束 如:/sed$/匹配所有以sed结尾的行。   

 .   匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。   

 *   匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

  [] 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。 

 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

  (..) 保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。 

 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。   

 <   锚定单词的开始,如:/<love/匹配包含以love开头的单词的行。  

  >   锚定单词的结束,如/love>/匹配包含以love结尾的单词的行。   

 x{m}   重复字符x,m次,如:/0{5}/匹配包含5个o的行。    

x{m,}   重复字符x,至少m次,如:/o{5,}/匹配至少有5个o的行。  

 x{m,n}   重复字符x,至少m次,不多于n次,如:/o{5,10}/匹配510个o的行。

13. w

将匹配的行(w)追加到文件

[root@mysql1 tmp]# sed ‘/a/w test’ tmp
a
b
c
d
e
f
g
[root@mysql1 tmp]# more test
a
14.x

将模式缓冲区中的内容替换匹配的行

[root@mysql1 tmp]# sed -e ‘/a/h’ -e ‘/b/x’ tmp
a
a
c
d
e
f
g
15.y

表示把一个字符翻译到另外一个字符

[root@mysql1 tmp]# sed ‘1,3y/abc/ABC/’ tmp
A
B
C
d
e
f
g