技术流ken

运维拯救世界

DAY21:课堂记录-shell函数和正则表达式–技术流ken

shell函数

 

格式:

funcname () {

CMD1

CMD2

}

funcname

 

return

 

函数传参

函数的传参是在调用函数名之后添加

 

 

shell正则表达式

 

1。   一个点.     表示含义匹配单个字符且该字符必须存在(相当与通配符中的问号)

例子1:

[root@ken ~]# cat test
ac
abc
abbc
anmcc

[root@ken ~]# grep “a.c” test
abc

[root@ken ~]# grep -o “a..c” test
abbc
anmc

 

2. ^ 表示匹配以某个字符开头的行

例子1:匹配以root开头的行

[root@ken ~]# cat test1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@ken ~]# grep “^root” test1
root:x:0:0:root:/root:/bin/bash
[root@ken ~]# grep “^r” test1
root:x:0:0:root:/root:/bin/bash

 

例子2:找到所有#号开头的行

[root@ken ~]# grep “^#” test1
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt

 

3. $ 表示匹配以什么字符结尾的行

例子1:找到所有以bash结尾的行

[root@ken ~]# grep “bash$” test1
root:x:0:0:root:/root:/bin/bash

 

例子2:找到所有空白行

[root@ken ~]# vim test1
[root@ken ~]# grep “^$” test1

 

4. * 表示的是匹配前面的一个字符出现0次或者多次

例子1:

[root@ken ~]# cat test | grep -o “a*b”
ab
ab
b
aab
aaab
aaaaab
b

 

例子2:

[root@ken ~]# cat test
abc
abbc
aab
aaab
aaaaab
acab

[root@ken ~]# cat test | grep -o “a*b”
ab
ab
b
aab
aaab
aaaaab
ab

 

例子3:

[root@ken ~]# cat test
abc
abbc
aab
aaab
aaaaab
acab

[root@ken ~]# grep -o “a.*b” test
ab
abb
aab
aaab
aaaaab
acab

 

5. []  表示匹配括号内的一个字符

例子1:

[root@ken ~]# cat test | grep -o “[ab]”
a
b
a
b
b
a
a
b
a
a
a
b
a
a

 

例子2:匹配以字母开头的行

[root@ken ~]# cat test1 | grep “^[a-z]”
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
operator:x:11:0:operator:/root:/sbin/nologin

 

例子3:

[root@ken ~]# cat test1 | grep “^[a-zA-Z]”
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Sync:x:5:0:sync:/sbin:/bin/sync
Ooperator:x:11:0:operator:/root:/sbin/nologin

 

例子4:

[root@ken ~]# cat test1 | grep “^[a-zA-Z0-9]”
root:x:0:0:root:/root:/bin/bash
3bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Sync:x:5:0:sync:/sbin:/bin/sync
Ooperator:x:11:0:operator:/root:/sbin/nologin

 

6. ^[^] 表示匹配非括号内的行

例子1:

[root@ken ~]# cat test1 | grep “^[^a-z]”
3bin:x:1:1:bin:/bin:/sbin/nologin
Sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
$mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
Ooperator:x:11:0:operator:/root:/sbin/nologin

 

7.锚定 单词首部:\<     特殊字符,空格

锚定单词尾部: \>

 

例子1:

[root@ken ~]# cat test1 | grep “\<root”
root:x:0:0:root:/root:/bin/bash
Ooperootrator:x:11:0:operator:/root:/sbin/nologin

 

例子2:

[root@ken ~]# cat test1 | grep “\<root\>”
root:x:0:0:root:/root:/bin/bash
rootooperootrator:x:11:0:operator:/root:/sbin/nologin

 

基础正则:中的{}。以及()前面都要加上\

使用格式:\{\}   \(\)

 

8. \{m,n\}  表示匹配前面的字符出现至少m次,至多n次

例子1:

[root@ken ~]# cat test | grep -o “a\{1,2\}b”
ab
ab
aab
aab
aab
ab

 

例子2:

[root@ken ~]# cat test | grep -o “a\{1,\}b”
ab
ab
aab
aaab
aaaaab
ab

 

9. \(\)   \1表示的对某个单词进行分组,\1表示对第一个分组进行调用

[root@ken ~]# sed -i ‘s/\(SELINUX=\)disabled/\1enforcing/g’ /etc/sysconfig/selinux

 

 

扩展正则使用:

1.egrep

2.grep -E

 

10.+  表示前面的字符出现一次的情况

例子1:

[root@ken ~]# cat test | egrep “a+b”
abc
abbc
aab
aaab
aaaaab
acab

 

例子2:

[root@ken ~]# cat test | grep -E “a+b”
abc
abbc
aab
aaab
aaaaab
acab

 

11.| 或

 

例子1:

[root@ken ~]# echo “cat jdkajk Cat” | grep -E “(cat)|(Cat)”
cat jdkajk Cat

 

例子2:

[root@ken ~]# echo “cat jdkajk Cat” | grep -E “(c|C)at”

cat jdkajk Cat

 

12.?表示前面的字符出现最多一次的情况

例子1:

[root@ken ~]# cat test | grep -E -o “a?b”
b
ab
ab
b
ab
ab
ab
ab

 

 

总结:基础正则

.

*

.*

^

$

[]

[^]

^[^]

\{\}

\(\)

\<

\>

 

扩展正则:egrep grep -E

.

*

.*

^

$

[]

[^]

^[^]

{}

()

\<

\>

+

|

发表评论

电子邮件地址不会被公开。