什么是正则?
正则就是一串有规律的字符串 掌握好正则对于编写shell脚本有很大帮助 各种编程语言中都有正则,原理是一样的
grep [-cinvABC] ‘word‘ filename
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反
-r 遍历所有子目录
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
公式:
grep ‘过滤词‘ 文件名
grep ‘root‘ passwd 在passwd文件里过滤出nologin,centos7里grep好的特点是,过来的关键词自动标红
grep -c ‘root‘ passwd #统计出现root过滤词的,有几行
grep -n ‘root‘ passwd #显示root过滤词在多少行出现的,并显示行号
grep -i ‘root‘ passwd 不区分‘过滤词的大小写‘
-v 取反 grep -v ‘root‘ passwd 有过滤词的,不显示。
-r 遍历所有子目录 #子目录里的过滤词也会过滤
-A 后面跟数字,过滤出过滤词所在的行,及A后面更得数字的行。
B 同上,过滤出符合要求的行以及上面n行
C 同上,同时过滤出符合要求的行以及上下各n行
grep -n ‘root‘ /etc/passwd
grep -nv ‘nologin‘ /etc/passwd
grep ‘[0-9]‘ passwd 列出任意一个0-9的数字
grep -v ‘[0-9]‘ passwd -v 取反, 任意一个0-9的数字不列出来。
grep -v ‘^#‘ passwd #^ ^ 代表以某某开头,例如:以#号开头 看配置文件,可以去掉以#开头的文件
grep -n ‘[^0-9]‘ passwd #非0-9,代表 不是数字
grep ‘^[^a-zA-Z]‘ test.txt #同上,非字母。 ^放在方括号里面,代表非
grep -v ‘^[^0-9]‘ passwd #以不是数字开头的行
grep ‘r.o‘ test.txt #r.o的任意的一个字符
grep ‘oo‘ test.txt # 值得是 一定要和前面的字符相关的,代表 o以前0次或多次
grep ‘.‘ test.txt #.* 所有
egrep ‘o{2}‘ /etc/passwd # 正则里面,{}表示一个范围。左边的命令是匹配不到的,正确的写法应该下面这个:
grep ‘o{2}‘ /etc/passwd \进行脱意。 匹配有两个o的,如果不想写脱意\ 可以这样写:
egrep ‘o{2}‘ /etc/passwd = grep ‘o{2}‘ /etc/passwd =grep -E ‘o{2} /etc/passwd
egrep ‘o+t‘ /etc/passwd # +代表 加号o以前一次或多次,后面紧跟着t
egrep ‘o+‘ /etc/passwd = grep ‘o\0+‘ /etc/passwd
egrep ‘oo?‘ /etc/passwd #?值得是?前面字符重复的0次或1次,类似
egrep ‘root|nologin‘ /etc/passwd # | 或者的意思,
egrep ‘root|nologin‘ /etc/passwd = grep -E ‘root|nologin‘
总结: . 表示任意一个字符,,表示0个或多个字符, .通配 {}表示范围,花括号前面字符的范围,可以用小括号括起来。+表示+前面的字符一个或多个。?表示0个或1个?前面的字符,| 表示或者。
原文地址:http://blog.51cto.com/13451715/2300910