六周第一次课(3月12日)
9.1 正则介绍_grep上
9.2 grep中
9.3 grep下
扩展
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/
9.1 正则介绍_grep(上)
介绍
本章将要学习 grep/egrep、sed、awk
egrep是grep升级版
test1 mkdir grep cd grep/ cp /etc/passwd . ls asswd grep 'nologin' passwd
grep自带颜色高亮显示
which grep可以看出高亮选项
grep -c #行数 grep -c 'nologin' passwd 15 grep -n #行号
grep -n 'nologin' passwd
grep -i #不区分大小写 (如果不加-i,有大写的一行会被剥掉)
grep -v 'nologin' passwd #取反 #意思就是把除了nologin之外的行过滤出来
grep -r #遍历所有子目录
# -A 后面跟数字,过滤出符合要求的行及下面n行 grep -nA2 'root' passwd 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 10:operator:x:11:0:operator:/root:/sbin/nologin 11-games:x:12:100:games:/usr/games:/sbin/NOlogin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin # -B 同上,过滤出符合要求的行以及上面n行 grep -nB2 'root' passwd 1:root:x:0:0:root:/root:/bin/bash -- 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin # -C 同上,同时过滤出符合要求的行以及上下各n行 grep -nC2 'root' passwd 1:root:x:0:0:root:/root:/bin/bash 2-bin:x:1:1:bin:/bin:/sbin/nologin 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin -- 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin 11-games:x:12:100:games:/usr/games:/sbin/NOlogin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
9.2 grep(中)
grep '[0-9]' passwd #[n-n]里面的数字是一个范围值,'[0-9]'代表0-9其中一个字符。
grep -v '[0-9]' passwd
那-v就是相反效果了,就是过滤没有[0-9]的值。意思就是,带数字的都不要。
grep -n '^高亮' passwd
^表示以什么开头。
把以#开头的行过滤出来。
grep -v '^#高亮' passwd
把不以#开头的行过滤出来。
#vi inittab
在11行任意输入纯字母参数。
1 # inittab is no longer used when using systemd. 2 # 3 # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. 4 # 5 # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target 6 # 7 # systemd uses 'targets' instead of runlevels. By default, there are two main targets: 8 # 9 # multi-user.target: analogous to runlevel 3 10 # graphical.target: analogous to runlevel 5 11 asdkle 12 # To view current default target, run: 13 # systemctl get-default 14 # 15 # To set a default target, run: 16 # systemctl set-default TARGET.target 17 #
grep -nv '^#' inittab 11:asdkle
第11行没有以#开头 所以被过滤出来。
# vi inittab
第十行增加数字加字母,第十五行添加纯数字
注意,[^]里面的^代表非,反义,取反的意思。例如[^0-9]代表非0-9,也算是非数字的意思。
但是,如果^[^0-9],[]外的^代表以xxx(具体看^后面参数)开头,例如这里^[^0-9]就是以非数字开头的意思。
grep '[^0-9]' inittab
过滤打印非数字的信息,注意:如果后面带有字母的参数,此条件会成立,如果一行只是纯数字,没有带任何字母或其他标点符号,则不成立。
grep -nv '[^0-9]' inittab 15:22222222222
过滤非非数字的信息,-v非,[^]非负负得正,所以意思就是过滤数字的信息。红色代表符合条件,白色表示不符合条件。
grep '^[^0-9]' inittab
过滤打印以非数字开头的信息。
grep -nv ^'[^0-9]' inittab 10:111aaa 15:22222222222
过滤打印以数字开头的信息。
总结:
取反,
例如 [^0-9] 那就是非数字(包括字母+特殊符号)
例如[^a-zA-Z] 那就是非字母(包括数字+特殊符号)
例如[^0-9a-zA-Z]那就是非数字字母(特殊符号)
[^] 匹配非方括号里面的内容。就是:只要不是方括号里面的内容都打印出来。
^[^] 匹配非方括号里面的内容开头的所有字符。 只要不是方括号里面的内容所开头的,都打印出来。
9.3 grep(下)
'r.o'表示把r与o之间有一个任意字符的行过滤出来。
.表示任意一个字符,包括标点符号,数字和字母.
grep 'r.o' passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
添加几行r.o相关的字符。
#vi passwd
'o*o' *左边的字符重复0-n次,*的右边表示与结尾,也是o 前后匹配的。
grep 'o*o' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 123:rao 456:r>o 132:r1o adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# vi passwd
'.*'任意一个任意字符
例如 'aming.*bash'
grep 'aming.*bash' passwd aming:x:1000:1000::/home/aming:/bin/bash
grep '{2}' #不成立 grep 'o{2}' #不成立。如果用#egrep 'o{2}' 则成立。或者用#grep -E 'o{2}'。 -E代表egrep. grep 'o\{2\}' # 成立,\脱义,此参数表示过滤打印出现两次o的信息。
egrep 'o{2}' passwd
与#grep 'o\{2\}'用法一样。
'o+o' +左边的字符重复1-n次,+的右边表示与结尾
grep 'o\+o' passwd egrep 'o+o' passwd
结果与上述*实验结果差不多。
+前后不一定都匹配。例如“o+t”
[root@centos7 grep]# grep 'o\+t' passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 123:rooot
过滤打印t或者ot的结果。
egrep 'o?t' passwd
grep -E 'root|nologin' passwd
可以匹配多个或者条件。如果加-i 可以不区分大小写,筛选范围会增大。
grep -E 'root|bus|997' passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin
则表示一对oo出现2次,相当于o的2的倍数。如此类推。
egrep '(oo){2}' passwd