正则预习
正则
正则是遗传有规律的字符串,对于编写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文件里含有o或oo或ooo等所有行,( 号表示左边的字符重复n次,如果是重复0次,那么就是一个o,因为还要加上右边的一个o)
o*o代表从数量中间为任意,两边为o ()o的值 ()内可以为空
.代表任意字符
过滤出passwd文件里含
有任意一个字符重复任意次的行,(结果其实就是列出所有,“. ” 代表所有的字符)
*表示左边的字符重复0到N次
过滤出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