正则介绍_grep(上)
正则就是一串有规律的字符串
掌握好正则对于编写shell脚本有很大帮助
各种编程语言中都有正则,原理是一样的
本章将要学习grep/egrep、sed、awk (网页三剑客)
grep
# grep "nologin" passwd
![](https://i-blog.csdnimg.cn/blog_migrate/49f3b547ee4a6f0867e69264183efe53.png)
//查看一个关键字有多少行
# grep -c "nologin" passwd
//显示行号
# grep -n "nologin" passwd
![](https://i-blog.csdnimg.cn/blog_migrate/93f8c254d551e3e57d5c6bef9eef2bd3.png)
过滤出不区分大小写
# grep -ni "nologin" passwd
![](https://i-blog.csdnimg.cn/blog_migrate/4569db638cdfdd01547340b350c41ce7.png)
过滤不包含关键字的行
# grep -vni "nologin" passwd
![](https://i-blog.csdnimg.cn/blog_migrate/dad8c59b6df2b285c242b66be3fbfd0e.png)
遍历过来所有目录
# grep -rn "nologin" /etc/
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
grep(中)
显示包含root的行号
# grep -n 'root' /etc/passwd
显示不包含root的行号.
# grep -nv 'nologin' /etc/passwd
过滤出0-9中的任意个字符
# grep '[0-9]'/etc/inittab
过滤取饭出0-9中的任意个字符
# grep -v '[0-9]' /etc/inittab
过滤出已#号开头的行
# grep -n "^#" /etc/inittab
过滤出不已#开头的行
# grep -v '^#' /etc/inittabgrep -v '^#' /etc/inittab|grep -v '^$'
过滤非a-zA-z开头的
# grep '^[^a-zA-Z]' passwd
![](https://i-blog.csdnimg.cn/blog_migrate/632240be87836ed5c9278ff65b1f2c65.png)
grep(下)
过滤包含r或者o的任意的一个字符
# grep 'r.o' test.txt
*表示*号前面的字符循环多次匹配,可以0次循环
# grep 'oo*' passwd
匹配所有字符
# grep '.*' test.txt
匹配一个范围,特殊符号记得要脱衣
# grep 'o\{2\}' /etc/passwd
匹配一个范围,特殊符号记得要脱衣,其中grep -E 跟egrep是一样的
# grep -E 'o{2}' /etc/passwdegrep 'o{2}' /etc/passwd
过滤表示一次或者多次,+号从1开始
# egrep 'o+' /etc/passwd
匹配表示?前面的字符0次或者1次重复出现
# egrep 'oo?' /etc/passwd
匹配root或者nologin
# egrep 'root|nologin' /etc/passwd
匹配oo两次那么就是4个o
egrep'(oo){2}' /etc/passwd
把一个目录下,过滤所有*.php文档中含有eval的行
# grep -r --include="*.php" 'eval' /data/