正则预习

正则

正则是遗传有规律的字符串,对于编写shell脚本有很大的帮助,各种编程语音中都有正则。

1,grep(1)

grep过滤指定关键词,最简单的用法:grep ‘关键词’ 文件名(关键词用单引号引起来)

正则预习

-c代表多少行数

正则预习

-n显示行数

正则预习

-i不区分大小写

-v取反(过滤出不带关键词的行),例如带有nologin,那么不现实带有nologin的行

正则预习

正则预习

例如-A 2

正则预习

-r遍历所有子目录

2,grep(2)

过滤带有数字的行 例如’[0-9]’

正则预习

 

-v过滤掉对应的信息

正则预习

过滤出1.txt文件里开头不带有#号的行

grep -nv '^#'  ,这里n是为了显示行数,n经常与其他的一起配合使用

正则预习

正则预习

 

grep '[^0-9]' 过滤出passwd文件里非纯数字的字符

注意这里是非纯数字,也就是说只要带有非数字的字符的都将会过滤出来

正则预习

3,grep(3)

 

过滤出passwd文件里含有r.o的所有行。(点代表任意一个字符)

例如:grep 'a.c' 2.txt

正则预习

正则预习

 

过滤出passwd文件里含有oooooo等所有行,( 号表示左边的字符重复n次,如果是重复0次,那么就是一个o,因为还要加上右边的一个o

o*o代表从数量中间为任意,两边为o ()o的值 ()内可以为空

正则预习

.代表任意字符

过滤出passwd文件里含

有任意一个字符重复任意次的行,(结果其实就是列出所有,“. 表所有的字符)

*表示左边的字符重复0N

正则预习

过滤出passwd文件里以yang开头,并且以bash结尾的行

我们给44加上一个后缀

正则预习

正则预习

可以看到也可以过滤出来,使用*

过滤出passwd文件里出现重复的两个o(就是oo)的行。{}表示前面字符的重复范围

o{2}表示o出现两次,因为直接写不匹配

正则预习

或者这样写,这里用扩展的egrep

 

其次用+号也可以实现

正则预习

如果用egrep,则就不需要\转移,注意+号大于等于1才行

正则预习

正则预习

egrep 'o+t' 1.txt

egrep 'o+o' 1.txt

+号也可以跟其他的字符,上面已经举例

egrep 'o?t' 1.txt   ?代表问号表示前面的字符重复0次或者1次

正则预习

例如上面的o?t ,代表t前出现过1次或者0次的o

竖线表示或者的意思。

grep -E 'root|111' 1.txt  例如匹配 root或者111

正则预习