Linux26期 7月3日预习笔记

9.1 正则介绍_grep上
9.2 grep中
9.3 grep下
扩展
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/

 

在计算机科学中,对“正则表达式”的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。

常用的工具有grep , sed ,awk 等,其中grep ,sed ,和 awk都是针对文本的进行操作的。

一,grep工具的使用

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

其常用选项如下所示:

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

2,-i :表示忽略大小写

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

4,-v :表示打印不符合要求的行

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

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

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

 

二,-A2会把包含halt的行以及这行下面的两行都打印出来:

e52cc60d9bd5225abc6ca71c06ebe8c10fb.jpg

说明:在CentOS7系统中,grep默认帮我们把匹配到的字符串标注为红色,这点还是挺贴心的。其实大家可以用which 命令查一下grep,会发现grep其实是grep——color=auto,这个选项就是颜色显示。

-B2会把包含halt的行以及这行上面的两行都打印出来

0771e523a7f4c38aa501d8501843c34b5e5.jpg

-C会把包含halt的行以及这行上下两行都打印出来

Linux26期 7月3日预习笔记_第1张图片

二,过滤出带有某个关键词的行,并输入行号,如下

b7b714173d9abb35be67b16bfcf6020816d.jpg

说明:前面的数字显示为绿色,表示行号

三,过滤出不带有某个关键词的行,并输出行号,如下:

Linux26期 7月3日预习笔记_第2张图片

四,过滤出所有包含数字的行,如下:

dcc2befb75b1bcd0b1dcd75ff83430c7f2a.jpg

说明:只要有一个数字就算是匹配到了

五,过滤出所有不包含数字的行,如下

Linux26期 7月3日预习笔记_第3张图片

说明:和上一列得结果正好相反,只要包含一个数字,就不显示。

六,过滤掉所有以#开头的行,如下:

Linux26期 7月3日预习笔记_第4张图片

说明:这里面是含有空行的。

 

七,过滤掉所有空行和以#开头的行,如下:

48e5b2c3399d98fc18e3c8196175cd2a27c.jpg

说明:在正则表达式中,^表示行的开始,$表示行的结尾,那么空行则可以用^$表示。如何打印出不以英文字母开头的行呢?我们先来自定义一个文件,如下所示:

Linux26期 7月3日预习笔记_第5张图片

33d9d13ee73aa73359a4f9fb3e4e9f76614.jpg

Linux26期 7月3日预习笔记_第6张图片

说明:[]的应用: 如果是数字就用[0-9]这样的形式(当遇到类似[15]的形式时,表示只含有1或者5),

如果要过滤数字以及大小写字母,则要写成类似[0-9a-zA-Z]的形式。

另外,[^字符]表示除[]内字符之外的字符。请注意,把^写到方括号里面和外面是由区别的。

 

八,过滤出任意一个字符和重复字符,如下:

3113d6b0a2038a40fa1c3f3878637ce0c4e.jpg

. 表示任意一个字符,上例中,r.o表示把r与o之间有一个任意字符的行过滤出来。

Linux26期 7月3日预习笔记_第7张图片

*表示零个或多个*前面的字符。上例中,ooo*表示oo,ooo,oooo.....或者更多的o

bc5961107a3a2c5e35f4e55943051b2f087.jpg

上例中, .*表示零个或多个任意字符,空行也包含在内,它会把/etc/passwd文件里面的所有行都匹配到,你也可以不加 |wc -l 看一下效果。

九,指定要过滤出的字符出现次数,如下

Linux26期 7月3日预习笔记_第8张图片

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

除grep工具外,还常常会用到egrep这个工具,后者是前者的扩展版本,可以完成grep不能完成的工作。

先把test.txt编辑成如下

Linux26期 7月3日预习笔记_第9张图片

九(1),过滤出一个或多个指定的字符,如下:

Linux26期 7月3日预习笔记_第10张图片

Linux26期 7月3日预习笔记_第11张图片

35eebaec52b4f94057b68e8b5b6afb84ec6.jpg

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

Linux26期 7月3日预习笔记_第12张图片

九(2),过滤出零个或一个指定的字符,如下:

Linux26期 7月3日预习笔记_第13张图片

8f77c3097986521bdf9930c1956b6a00f43.jpg

d115e6dc1f680716d1da0423a9bc4f7015c.jpg

 

九(3),过滤出字符串1或者字符串2,如下

a1b92793bef0ddee105d4fee4301c353181.jpg

九(4),egrep中()的应用,如下:

13e5d6f28137fdc0fb730fee0e955dea478.jpg

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3851620/blog/1839679

你可能感兴趣的:(Linux26期 7月3日预习笔记)