目录
1 grep命令
什么是正则
- 正则就是一串有规律的字符串
- 掌握好正则对于编写shell脚本有很大帮助
- 各种编程语言中都有正则,原理是一样的
- 本章将要学习grep/egrep、sed、awk
grep [-cinvABC] 'word' filename
-c:表示打印符合要求的行数
-i:表示忽略大小写
-n:表示输出符合要求的行及其行号
-v:表示打印不符合要求的行
-r 遍历所有子目录
-A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行
-B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行
-C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行
- 拷贝/etc/passwd作为实验文件
[root@worker1 dir9]# cp /etc/passwd ./testpasswd
[root@worker1 dir9]# ls
testpasswd
- 过滤匹配字符“nologin”的行
- [root@worker1 dir9]# grep 'nologin' testpasswd
- 参数:-n
- [root@worker1 dir9]# grep -n 'nologin' testpasswd
- 参数:-v
- [root@worker1 dir9]# grep -nv 'nologin' testpasswd
- 参数:-i
- [root@worker1 dir9]# vim testpasswd //将第一行的root改为ROOT
- ROOT:x:0:0:root:/root:/bin/bash
- [root@worker1 dir9]# grep -ni 'root' testpasswd
- 参数:-r
- [root@worker1 dir9]# grep -r 'nologin' /etc/ | head
- 参数:-A
- [root@worker1 dir9]# grep -nA1 'adm' testpasswd
- 参数:-B
- [root@worker1 dir9]# grep -nB1 'adm' testpasswd
- 参数:-C
- [root@worker1 dir9]# grep -nC1 'adm' testpasswd
- 拷贝/etc/inittab作为实验文件
[root@worker1 dir9]# cp /etc/inittab ./testinittab
[root@worker1 dir9]# ls
testinittab testpasswd
- 过滤带有[0-9]数字的行
- [root@worker1 dir9]# grep '[0-9]' testinittab
- 过滤不带有[0-9]数字的行
- [root@worker1 dir9]# grep -v '[0-9]' testinittab
过滤不带有^#开头的行
[root@worker1 dir9]# vim testinittab //在末尾添加以下三行
hello world
123
11 22
[root@worker1 dir9]# grep -v '^#' testinittab
hello world
123
11 22
- 先过滤非字母的行,再过滤非数字行
[root@worker1 dir9]# grep -v '^[^a-zA-Z]' testinittab
hello world
- 过滤出符合r.o形式的行
- [root@worker1 dir9]# grep 'r.o' testpasswd
- 过滤出符合o,oo或者多个ooo形式的行
- 匹配任何字符的内容
- [root@worker1 dir9]# grep '.*' testpasswd
- 过滤带有两个o的内容
- [root@worker1 dir9]# grep 'o\{2\}' testpasswd
- 过滤带有0~2个o的内容
- [root@worker1 dir9]# grep 'o\{0,2\}' testpasswd
- 过滤带有两个o的内容
- [root@worker1 dir9]# egrep 'o{2}' testpasswd
- 过滤带有一个或者多个o的内容
- [root@worker1 dir9]# egrep 'o+' testpasswd
- 过滤带有两个o或者一个0的内容
- [root@worker1 dir9]# egrep 'oo?' testpasswd
- 过滤出带有'root或nologin的内容
- [root@worker1 dir9]# egrep 'root|nologin' testpasswd
- 过滤出带有四个oooo字符内容
[root@worker1 dir9]# vim testpasswd //将第一行的其中一个root改为roooot
- [root@worker1 dir9]# egrep '(oo){2}' testpasswd
扩展
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/