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-9.3 grep工具

二十正则介绍grep上grep中grep下

9.1 正则介绍_grep(上);9.2 grep(中);9.3 grep(下)

9.1 正则介绍_grep上 9.2 grep中 9.3 grep下

9.1 正则介绍_grep上 9.2 grep中 9.3 grep下

六周第一次课 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下