9.1-9.3 正则介绍 grep上 中 下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9.1-9.3 正则介绍 grep上 中 下相关的知识,希望对你有一定的参考价值。
六周第一次课(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
[[email protected] ~]# mkdir grep
[[email protected] ~]# cd grep/
[[email protected] grep]# cp /etc/passwd .
[[email protected] grep]# ls
passwd
[[email protected] grep]# grep 'nologin' passwd
grep自带颜色高亮显示
which grep可以看出高亮选项
#grep -c
行数
[[email protected] grep]# grep -c 'nologin' passwd
15
#grep -n
行号
[[email protected] grep]# grep -n 'nologin' passwd
#grep -i
不区分大小写 (如果不加-i,有大写的一行会被剥掉)
#grep -v 'nologin' passwd 取反
意思就是把除了nologin之外的行过滤出来
#grep -r
遍历所有子目录
-A 后面跟数字,过滤出符合要求的行及下面n行
[[email protected] grep]# 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行
[[email protected] grep]# 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行
[[email protected] grep]# 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
[[email protected] grep]# grep -v '[0-9]' passwd
那-v就是相反效果了,就是过滤没有[0-9]的值。意思就是,带数字的都不要。
#grep -n '^#高亮' passwd
^表示以什么开头。
把以#开头的行过滤出来。
#grep -v '^#高亮' passwd
把不以#开头的行过滤出来。
[[email protected] grep]# 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 #
[[email protected] grep]# grep -nv '^#' inittab
11:asdkle
第11行没有以#开头 所以被过滤出来。
[[email protected] grep]# vi inittab
第十行增加数字加字母,第十五行添加纯数字
注意,[^]里面的^代表非,反义,取反的意思。例如[^0-9]代表非0-9,也算是非数字的意思。
但是,如果^[^0-9],[]外的^代表以xxx(具体看^后面参数)开头,例如这里^[^0-9]就是以非数字开头的意思。
[[email protected] grep]# grep '[^0-9]' inittab
过滤打印非数字的信息,注意:如果后面带有字母的参数,此条件会成立,如果一行只是纯数字,没有带任何字母或其他标点符号,则不成立。
[[email protected] grep]# grep -nv '[^0-9]' inittab
15:22222222222
过滤非非数字的信息,-v非,[^]非负负得正,所以意思就是过滤数字的信息。红色代表符合条件,白色表示不符合条件。
[[email protected] grep]# grep '^[^0-9]' inittab
过滤打印以非数字开头的信息。
[[email protected] grep]# 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之间有一个任意字符的行过滤出来。
.表示任意一个字符,包括标点符号,数字和字母.
[[email protected] grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#vi passwd添加几行r.o相关的字符。
'o*o' *左边的字符重复0-n次,*的右边表示与结尾,也是o 前后匹配的。
[[email protected] grep]# 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
[[email protected] grep]# vi passwd
'.*'任意一个任意字符
例如 'aming.*bash'
[[email protected] grep]# 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的信息。
[[email protected] grep]# egrep 'o{2}' passwd
与#grep 'o\{2\}'用法一样。
'o+o' +左边的字符重复1-n次,+的右边表示与结尾
#grep 'o\+o' passwd
#egrep 'o+o' passwd
结果与上述*实验结果差不多。
+前后不一定都匹配。例如“o+t”
[[email protected] grep]# grep 'o\+t' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
123:rooot
#egrep 'o?t' passwd
过滤打印t或者ot的结果。
#grep -E 'root|nologin' passwd
可以匹配多个或者条件。如果加-i 可以不区分大小写,筛选范围会增大。
[[email protected] grep]# 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
#egrep '(oo){2}' passwd 则表示一对oo出现2次,相当于o的2的倍数。如此类推。
以上是关于9.1-9.3 正则介绍 grep上 中 下的主要内容,如果未能解决你的问题,请参考以下文章
9.1 正则介绍_grep(上);9.2 grep(中);9.3 grep(下)
9.1 正则介绍_grep上 9.2 grep中 9.3 grep下