标签:linux
9.1 正则介绍_grep(过滤)上正则介绍:
解释对“正则表达式”的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其他工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容。许多程序设计语言也都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,还是查询某个日志文件并分析其内容,都会用正则表达式。 其实正则表达式只是一种思想、一种表示方法。只要我们使用的工具支持这种表示方法,那么这个工具就可以处理正则表达式的字符串。常用的工具有grep、sed、awk等,其中grep、sed和awk都是针对文本的行进行操作的。
正则就是有一定规律的字符串,有几个特殊符号很关键(. * + ? | ),我们平时不仅可以用命令行工具grep/sed/awk 去引用正则,而且还可以把正则嵌入在nginx、apache、甚至php、python 编程语言当中,学好正则可以让你受用无穷!
grep工具的使用:
grep命令 主要作用:过滤指定关键词
命令格式为:grep [-cinvABC] ‘word' filename
常用选项含义表示如下:
-c:表示打印符合要求的行数。
-i:表示忽略大小写。
-n:表示输出符合要求的行及其行号。
-v:表示打印不符合要求的行,取反。
-r:遍历所有子目录
-A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面的两行。
-B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行。
-C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行。
参数验证操作:
1.验证准备
1.1 打印带有关键词'nologin'的总行数命令:grep -c 'nologin' passwd
1.2 过滤出带关键词'root'的行,并输出行号,前面的数字显示为绿色,表示行号
命令:grep -n 'root' passwd
1.3 过滤出不带'nologin'关键词的行,并输出行号
命令:grep -nv 'nologin' passwd
1.4 编辑文件passwd把第二行no改成大写NO,过滤带'nologin'关键词,结果
不显示出大写的第二行
1.4.1 过滤带'nologin'关键词,不区分大小写,把大写行也列出
命令:grep -ni 'nologin' passwd //加-i
1.5 打印显示etc下的所有子目录
命令:grep -r 'root' /etc/
1.6 -A2参数 会把包含root的行以及这行下面的两行都打印出来
1.7 -B2参数 会把包含root的行以及这行上面的两行都打印出来
1.8 -C2 参数会把包含root的行以及这行上下各两行都打印出来
9.2 grep中
1.过滤出所有包含数字的行 命令:grep '[0-9]' passwd
2. 过滤出所有不包含数字的行 命令:grep -v '[0-9]' passwd
3. 把所有以 ‘#’ 开头的行去除命令:grep -v '^#' passwd
4. 去除所有空行和以 ‘#’ 开头的行 命令:grep -v '^#' passwd | grep -v '^$'
正则表达式中,^ 表达行的开始,$表示行的结尾那么空行则可以用^$表示
4.1 如何打印出不以英文开头的行呢?如下所示:
命令:grep '^[^a-zA-Z]' test.txt
9.3 grep下
1. 。过滤任意一个字符与重复字符 ,r.o表示把r与o之前有一个任意字符的行过滤出来。
命令:grep 'r.o' passwd (.表示任意一个字符)
2.表示零个或多个前面的字符,ooo*表示oo、ooo、oooo...或者更多的o
命令:grep 'ooo*' passwd
3..*表示零个或多个任意字符,空行也包含在内,它会把passwd文件里面的所有行都匹配到,命令:grep '.*' passwd |wc -l
4. 指定要过滤字符出现的次数,命令:grep '0\{2\}' passwd
里用到了符号{},其内部为数字,表示前面的字符要重复的次数。需要强调的是,{}左右都需要加上转义字符\。另外,使用“{}”还可以表示一个范围,具体格式为{n1,n2},其中n1<n2,表示重复n1到n2次数前面的字符,n2还可以为空,这时表示大于等于n1次。
5.egrep工具的使用:
egrep工具是grep工具的扩展版本,可以完成grep不能完成的工作。我们也可以用grep-E代替egrep。
5.1 过滤出一个或多个指定的字符 命令:egrep 'o+' passwd
和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
5.3 过滤出字符串1或者字符串2 命令: egrep 'aaa|111|ooo' passwd
5.4 egrep中()的应用
命令:egrep 'r(oo|at)o' passwd
这里用()表示一个整体,上例中会把包含rooo或者rato的行过滤出来,另外也可以把()和其他符号组合在一起,例如(oo)+表示1个或者多个oo,如下所示:
命令:egrep '(oo)+' test.txt
标签:linux
原文地址:http://blog.51cto.com/404006045/2107824