扩展
把一个目录下,过滤所有*.php文档中含有eval的行 :
# grep -r --include="*.php" 'eval' /data/
9.1 正则介绍_grep(上)
正则是什么?
? 正则就是一串有规律的字符串
? 掌握好正则对于编写shell脚本有很大帮助
? 各种编程语言中都有正则,原理是一样的
1.创建目录: mkdir grep
2.进入目录: cd grep
3.拷贝文件到当前目录: cp /etc/passwd .
grep |
跟下面的参数! |
-c |
含有关键词 行数 |
-i |
关键词 不区分大小写 |
-n |
显示行号 |
-v |
取反(非关键词行也列出来) |
-r |
遍历所有子目录(含有关键词行的子目录会紫色标记) |
-A |
-A跟数字(3) 列出关键词行和关键词下面数字行(3行) |
-B |
-B跟数字(3) 列出关键词行和关键词上面数字行(3行) |
-C |
-B跟数字(3) 列出关键词行和关键词上下各数字行(各3行) |
1. grep -c 查看含有关键词行,共有行数?
grep -c '关键词' 文件名
[[email protected] grep]# grep -c 'nologin' passwd
2. grep -n 文件内容标注行号:
grep -n '关键词' 文件名
[[email protected] grep]# grep -n 'nologin' passwd
3. grep -ni 文件内容标注行号,并搜索关键词不区分大小写:
grep -ni '关键词' 文件名
[[email protected] grep]# grep -ni 'nologin' passwd
4. grep -vni 内容标注行号,关键词不区分大小写并同时列出不含关键词的行:grep -vni '关键词' 文件名
[[email protected] grep]# grep -vni 'nologin' passwd
5. etc下:列出含有关键词行的子目录并遍历(紫色标记):
grep -r '关键词' 指定目录
[[email protected] grep]# grep -r 'nologin' /etc/
6. grep -nA2 列出文件中含有关键词行,并列出关键词下2行:
grep -nA2 '关键词' 文件名
[[email protected] grep]# grep -nA2 'root' passwd
7. grep -nB2 列出文件中含有关键词行,并列出关键词上2行:
grep -nB2 '关键词' 文件名
[[email protected] grep]# grep -nB2 'root' passwd
8. grep -nC2 列出文件中含有关键词行,并列出关键词上下各2行:
grep -nC2 '关键词' 文件名
[[email protected] grep]# grep -nC2 'root' passwd
9.2 grep(中)
1. 过滤出 包含0-9数字的行:grep '[数字范围]' 文件名
[[email protected] grep]# grep '[0-9]' passwd
2. 过滤出 不包含0-9数字的行:grep -v '[数字范围]' 文件名
[[email protected] grep]# grep -v '[0-9]' passwd
^放在方括号里面,是方括号里面字符的反义(非)
^放在方括号外面,以方括号里面字符开头
3. 过滤出 以#号开头的行:grep -n '^#' 文件名
[[email protected] grep]# grep -n '^#' passwd
4. 过滤出 不以#号开头的行:grep -nv '^#' 文件名
[[email protected] grep]# grep -nv '^#' passwd
5. 过滤出 含有非0-9数字行(纯数字行不会显示),非数字字符红色标记:
[[email protected] grep]# grep -n '[^0-9]' passwd
6. 过滤出 含有非a-z字母行(纯字母行不会显示),非字母字符红色标记:
[[email protected] grep]# grep -n '[^a-z]' passwd
7. 过滤出 不以0-9数字开头的行:
[[email protected] grep]# grep -n '^[^0-9]' passwd
8. 过滤出 以0-9数字开头的行:
[[email protected] grep]# grep -nv '^[^0-9]' passwd
9. 过滤出 不以a-z字母开头的行:
[[email protected] grep]# grep -n '^[^a-z]' passwd
10. 过滤出 以a-z字母开头的行:
[[email protected] grep]# grep -nv '^[^a-z]' passwd
9.3 grep(下)
1. 匹配出 含有关键词.关键词的行(.表示任意的一个字符):
grep '关键词.关键词' passwd
[[email protected] grep]# grep 'r.o' passwd
2. 匹配出 含有关键词的行(*左边字符可重复任意次):
[[email protected] grep]# grep 'o*o' passwd
3. 匹配出 所有字符所有行都匹配了:
[[email protected] grep]# grep '.*' passwd
4. 匹配出 包含关键词.*关键词行:grep '关键词.*关键词' 文件名
[[email protected] grep]# grep 'hao.*bash' passwd
5. {}里的数字,表示{}前面关键词的重复范围:
[[email protected] grep]# grep 'o\{2\}' passwd
或[[email protected] grep]# egrep 'o\{2\}' passwd
或[[email protected] grep]# grep -E 'o\{2\}' passwd
6. 00组合的2次重复,最少也要匹配出含有4个o的行:
[[email protected] grep]# egrep '(oo){2}' passwd
7. 匹配出 +左边字符o可
1次或多次重复,后面匹配关键词t
[[email protected] grep]# egrep 'o+t' passwd
8. ?前面字符的重复次数为0或1,
[[email protected] grep]# egrep 'o?2o' passwd
9. | 或者意思,匹配出包含关键词|(或者)匹配出关键词|(或者)匹配出关键词的行!
[[email protected] grep]# grep -E 'root|nologin|hao' passwd
总结:
. |
任意一个字符 |
* |
0个或多个*号前面的字符 |
.* |
通配 所有的都匹配,没有字符也匹配 |
{} |
花括号里的数字,表示{}前面的字符范围,前面字符可以用()括起来 |
+ |
一个或多个加号前面的字符 |
? |
0个或1个问号前面的字符 |
| |
或者意思 |
原文地址:http://blog.51cto.com/zhuneianxiang/2061197