一、什么是正则
正则就是一串有规律的字符串。掌握好正则对于编写shell有很大帮助!!!
二、grep、egrep工具
1、命令格式:grep -cinvrABC 'word' filename
c 行数
i 不区分大小写
-c 打印符合要求的行数 grep -c 'nologin' /etc/passwd (显示过滤字符的行数)
(为什么过滤的选项什么标红? which grep)
-i 忽略大小写 grep -i 'nologin' passwd (不分大小写,标红显示我们过滤的字符)

-n 输出符合要求的行及行号 grep -ni 'nologin' passwd
-v 打印不符合要求的行 grep -v 'nologin' passwd (列了没有这个字符的行)
-r 遍历所有的子目录 grep -r 'root' /etc/ (列出ect目录所有文件包括root字符的行)
-A 后面跟一个数字,打印出符合要求的行及在行下面列出不符合要求的两行
grep -nA2 'nologin' passwd
-B 后面跟一个数字,打印出符合要求的行及在行上面列出不符合要求的两行
grep -B2 'nologin' passwd
-C 后面跟一个数字,打印出符合要求的行及在行上下面各列出不出不符合要求的两行
grep -C4 'nologin' passwd
2、grep的具体用法
正则表达式:
grep '[0-9]' passwd 过滤所有包括数字的行;
grep -v '[0-9]' /etc/inittab 过滤所有不包含数字的行;
grep -n '^#' /etc/inittab 过滤有#号开头的行;
grep -nv '^#' /etc/inittab 过滤出没有#的行;
grep '[^0-9]' /etc/inittab 非数字就符合要求,^就是非;
grep '^[^0-9]' /etc/inittab 非数字开头的行。第一个^就是开头的意思,在括号里就取反,非的意思。
grep 'r.o' passwd “.”表示任意的一个字符。也就是说r.o可以=rao \r2o \rAo
grep 'o星号o' passwd 星号表示0个或多个*前面那个字符,在这一行里表示n个o
grep '.星号' passwd .星号表示任意个任意字符
grep 'o{2}' passwd 表示匹配2次o,{ }表示一个范围。如果觉得脱义符号不好写,也可以写成:egrep 'o{2}' passwd 也可以写成: grep -E 'o{2}' passwd,
grep '(oo){2}' passwd 表示匹配2次oo
grep 'o+o' passwd + 表示1次或多次的+前面的那个字符。可以写成:egrep 'o+o' passwd
grep 'o\?o' passwd ?表示 ? 号前面字符的重复0次或1次.可以写成: egrep 'o?o' passwd
grep -E 'root|nologin' passwd | 表示或者,同时过滤出有root或者nologin的行
*把一个目录下,过滤所有 .php文档中含有eval的行*
grep -r --include=".php" 'eval' /data/