9.1 正则介绍_grep 上
grep [-cinvABC] 'word' filename
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反
-r 遍历所有子目录
-A 后面跟数字, 过滤出符合要求的行以及下面 n 行
-B 同上, 过滤出符合要求的行以及上面 n 行
-C 同上, 同时过滤出符合要求的行以及上下各 n 行
9.2 grep 中
grep -n 'root' /root/passwd #过滤包含 root 的行并显示行号
grep -nv 'nologin' /root/passwd #过滤不包含 nologin 的行并显示行号
- grep '[0-9]' /root/inittab #查找包含数字的行
- [root@Aiker ~]# grep '[0-9]' /root/inittab
- #multi-user.target: analogous to runlevel 3
- #graphical.target: analogous to runlevel 5
- grep -v '[0-9]' /root/inittab #过滤不包含数字的行
- [root@Aiker ~]# grep -v '[0-9]' /root/inittab
- #inittab is no longer used when using systemd.
- #
- #ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
- grep -v '^#' /root/inittab #过滤不包含 #的行,^# 不是 #开头的行
- [root@Aiker ~]# grep -v '^#' /root/inittab
- Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
- iewr#
- 35466
- grep -v '^#' /root/inittab|grep -v '^' #先过滤出不是 #开头的行, 再在中间过滤出不是卡头的行 (第二个 grep 中不能用特殊符号 ^$ 表示空行, 以空开头 以空结尾 就是空行)
- [root@Aiker ~]# grep -v '^#' /root/inittab | grep -v '^3'
- Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
- $# multi-user.target: analogous to runlevel 3
- iewr#
- $12312
- [root@Aiker ~]# grep -v '^#' /root/inittab | grep -v '^i'
- Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
- $# multi-user.target: analogous to runlevel 3
- 35466
- $12312
grep '^[^a-zA-Z]' /root/passwd #查出不含字母的含
- [root@Aiker ~]# grep '^[^a-zA-Z]' /root/passwd
- 234234235
- &&
- grep 'm.s' /root/passwd #"." 表示任意一个字符, 查找 m 开头 + 中间任意一个字符 + s 结尾
- [root@Aiker ~]# grep 'm.s' /root/passwd
- games:x:12:100:games:/usr/games:/sbin/nologin
- dbus:x:81:81:System message bus:/:/sbin/nologin
- mysql:x:1017:1017::/home/mysql:/sbin/mologin
- grep 'oo' /root/passwd # "" 表示 0 个或多个前面这个字符
- grep 'oo' /root/passwd #左边的这个字符重复 0 到 n 次, 一次是'oo', 两次是'ooo'
这里写图片描述
grep '.' /root/passwd #匹配所有字符串
- grep 'o{2}' /root/passwd #匹配 o 出现 2 次 等于 grep -E 'o{2}' /root/passwd
- [root@Aiker ~]# grep 'o\{2\}' /root/passwd
- root:x:0:0:root:/root:/bin/bash
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- roooot:#45345
- toooos:2423
- [root@Aiker ~]# grep 'o\{3\}' /root/passwd
- roooot:#45345
- toooos:2423
这里写图片描述
egrep 可以不脱意 {},grep -E 也可以达到 egrep 效果
egrep 'o{2}' /root/passwd #效果同 grep 'o{2}' /root/passwd
egrep 'o+t' /root/passwd # + 这个符号前面的重复一次或者 n 次,* 号是 0 次或者多次
这里写图片描述
egrep 'oo?' /root/passwd #? 前面这个字符重复次数为 0 或者 1
egrep 'root|nologin' /root/passwd #包含 root 或者 nologin 的行
egrep '(oo){2}' /root/passwd #连续两个 00 在一起的行
- [root@Aiker ~]# egrep '(oo){2}' /root/passwd
- roooot:#45345
- toooos:2423
9.3 grep 下
grep -v '^#' /etc/inittab 不显示 #开头的行也就是不显示注释行
grep -Ev '^$|^[#;]' inittab 过滤注释和空行
grep -v '^#' /etc/inittab|grep -v '^$' 效果同上
grep '^[^a-zA-Z]' test.txt 显示非字母开头的行内容
grep -n '^[0-9]' inittab 显示数字开头的行内容和行号
grep -n '^[^0-9]' inittab 显示非数字开头的行内容和行号
grep 'r.o' test.txt 匹配除换行符 \n 之外的任何单字符. 要匹配 . , 请使用 .
grep 'oo' test.txt 匹配前面的子表达式零次或多次. 要匹配 字符, 请使用 *.
grep '.' test.txt 匹配任意字符
grep 'o{2}' /etc/passwd 匹配 2 次,{} 表示范围
egrep 'o{2}' /etc/passwd 同上
egrep 'o+' /etc/passwd 匹配 + 前的字符一次或者多个
egrep 'oo?' /etc/passwd 匹配一个或者 0 个
egrep 'root|nologin' /etc/passwd | 表示或者
egrep '(oo){2}' /etc/passwd () 表示一个整体
扩展
把一个目录下, 过滤所有. php 文档中含有 eval 的行
grep -r --include="*.php" 'eval' /data/
来源: http://www.bubuko.com/infodetail-2567420.html