4月25日

9.1 正则介绍_grep(过滤)上

正则介绍:

解释对正则表达式的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其他工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容。许多程序设计语言也都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,还是查询某个日志文件并分析其内容,都会用正则表达式 其实正则表达式只是一种思想、一种表示方法。只要我们使用的工具支持这种表示方法,那么这个工具就可以处理正则表达式的字符串。常用的工具有grepsedawk等,其中grepsedawk都是针对文本的行进行操作的。

 正则就是有一定规律的字符串,有几个特殊符号很关键(. * + ? | ),我们平时不仅可以用命令行工具grep/sed/awk 去引用正则,而且还可以把正则嵌入在nginxapache、甚至phppython 编程语言当中,学好正则可以让你受用无穷!

grep工具的使用:

grep命令 主要作用:过滤指定关键词

命令格式为:grep [-cinvABC] ‘word' filename

常用选项含义表示如下:

 -c:表示打印符合要求的行数。

 -i:表示忽略大小写。

 -n:表示输出符合要求的行及其行号。

 -v:表示打印不符合要求的行,取反。

 -r:遍历所有子目录

 -A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面的两行。

 -B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行。

 -C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行。

参数验证操作:

 1.验证准备

blob.png 

1.1 打印带有关键词'nologin'的总行数命令:grep -c 'nologin' passwd

blob.png 

1.2 过滤出带关键词'root'的行,并输出行号,前面的数字显示为绿色,表示行号

命令:grep -n 'root' passwd

blob.png 

1.3 过滤出不带'nologin'关键词的行,并输出行号

命令:grep -nv 'nologin' passwd

blob.png 

1.4 编辑文件passwd把第二行no改成大写NO,过滤'nologin'关键词,结果

不显示出大写的第二行

blob.png 

1.4.1 过滤带'nologin'关键词,不区分大小写,把大写行也列出

命令:grep -ni 'nologin' passwd //-i

blob.png 

1.5 打印显示etc下的所有子目录

命令:grep -r 'root' /etc/

blob.png 

1.6 -A2参数 会把包含root的行以及这行下面的两行都打印出来

blob.png 

1.7 -B2参数 会把包含root的行以及这行上面的两行都打印出来

blob.png 

1.8 -C2 参数会把包含root的行以及这行上下各两行都打印出来

blob.png 

 9.2 grep中

1.过滤出所有包含数字的行 命令:grep '[0-9]' passwd

blob.png 

2. 过滤出所有不包含数字的行 命令:grep -v '[0-9]' passwd

blob.png 

3. 把所有以 ‘#’ 开头的行去除命令:grep -v '^#' passwd

blob.png 

4. 去除所有空行和以 ‘#’ 开头的行 命令:grep -v '^#' passwd | grep -v '^$'

blob.png 

正则表达式中,^ 表达行的开始,$表示行的结尾那么空行则可以用^$表示

4.1 如何打印出不以英文开头的行呢?如下所示:

命令:grep '^[^a-zA-Z]' test.txt 


9.3 grep下

1. 过滤任意一个字符与重复字符 r.o表示把ro之前有一个任意字符的行过滤出来。

命令:grep 'r.o' passwd    .表示任意一个字符

blob.png 

2.表示零个或多个前面的字符,ooo*表示ooooooooo...或者更多的o

命令:grep 'ooo*'  passwd

blob.png 

3..*表示零个或多个任意字符,空行也包含在内,它会把passwd文件里面的所有行都匹配到,命令:grep '.*' passwd |wc -l

blob.png 

4. 指定要过滤字符出现的次数,命令:grep '0\{2\}' passwd

blob.png 

里用到了符号{},其内部为数字,表示前面的字符要重复的次数。需要强调的是,{}左右都需要加上转义字符\。另外,使用{}还可以表示一个范围,具体格式为{n1,n2},其中n1<n2,表示重复n1n2次数前面的字符,n2还可以为空,这时表示大于等于n1次。

5.egrep工具的使用:

egrep工具是grep工具的扩展版本,可以完成grep不能完成的工作。我们也可以用grep-E代替egrep

5.1 过滤出一个或多个指定的字符 命令:egrep 'o+' passwd

blob.png 

grep不同,这里egrep使用的是符号+,它表示匹配1个或多个+前面的字符,这个“+”是不支持审美观点grep直接使用的,包括上面{},也是可以直接被egrep使用,而不用加\转义,示例如下:

1

2

3

4

5

6

[root@aminglinux-01 grep]# egrep 'o{2}' passwd 

root:x:o:o: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:o:operator:/root:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

5.2过滤出零个或一个指定的字符 命令:egrep 'o?' passwd

blob.png 

5.3 过滤出字符串1或者字符串2 命令: egrep 'aaa|111|ooo'  passwd

blob.png 

5.4 egrep()的应用

命令:egrep 'r(oo|at)o' passwd

blob.png 

这里用()表示一个整体,上例中会把包含rooo或者rato的行过滤出来,另外也可以把()和其他符号组合在一起,例如(oo)+表示1个或者多个oo,如下所示:

命令:egrep '(oo)+' test.txt

blob.png 

 



猜你喜欢

转载自blog.51cto.com/404006045/2107824