码迷,mamicode.com
首页 > 其他好文 > 详细

正则介绍、grep

时间:2017-11-21 10:47:20      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:正则介绍、grep

正则介绍

在计算机科学中,对“正则表达式”的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其它工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容。许多程序设计语言也都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作和中,物理李娜是查找某个文档,还是查询某个日志文件并分析其内容,都会用到正则表达式。

其实正则表达式只是一种思想、一种表示方法。只要我们使用的工具支持这种表示方法,那么这个工具就可以处理正则表达式的字符串。常用的工具grep、sed、awak等。



grep命令

grep是用来过滤指定关键词的。

grep是一种强大的文本搜索工具,它能使用特定模式匹配搜索文本,并默认输出匹配行。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。


grep [cinvABC] ‘word‘ filename

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

-i 表示忽略大小写

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

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

-r 递归的读取目录下的所有文件,包括子目录。

比如grep -r ‘root’/etc/ 会找出/etc/目录及子目录下的所有文件中,含有root字符串的行。

-A 后跟一个数字,例如-A 2 表示打印符合要求的行以及下面两行。

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

-C 后跟一个数字,例如-C 2 表示打印合格要求的行已经上下两行。


grep后不跟任何参数。

查找出文件passwd中带有字符串nologin的行。

技术分享图片


grep -c

打印出文件passwd中含有nologin字符串的行数(有几行含有nologin。)

[root@centos-01 grep]# grep -c ‘nologin‘ /root/grep/passwd

17


grep -n

输出符合要求的内容,并显示行号。

技术分享图片


grep -i

忽略大小写。

技术分享图片


grep -v

取反,打印不符合要求的行。

在passwd文件中查找不含有nologin字符串的行。

技术分享图片


grep -r

递归的读取目录下的所有文件,包括子目录。

比如grep -r ‘root’/etc/ 会找出/etc/目录及子目录下的所有文件中,含有root字符串的行。


grep -A

后面跟数字n,表示符合要求的行及下面n行。

技术分享图片


grep -B

后面跟数字n,表示符合要求的行及上面n行。

技术分享图片


grep -C

后面跟数字n,表示符合要求的行及上下n行。

技术分享图片


grep ‘[0-9]‘ /etc/inittab

打印出文件中含有数字1-9其中一个的行。

grep -v ‘[0-9]‘ /etc/inittab

打印出文件中不含有数字0-9其中一个的行。

技术分享图片


grep ‘^#‘ /etc/inittab

打印出文件中以#开头的行。

grep -v ‘^#‘ /etc/inittab

打印出文件中不以#开头的行。

技术分享图片


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

grep ‘^&‘ inittab

打印出文件中的空行。

grep -v ‘^&‘ inittab

打印出文件中的非空行。

技术分享图片


[^字符]表示除[]内字符之外的字符。^有非的意思。

grep -n ‘^[^0-9]‘ inittab

打印出开头不为数字的行,并显示行号。

grep -nv ‘^[^0-9]‘ inittab

打印出开头为数字的行和空行,并显示行号。

技术分享图片


grep -n ‘[^0-9]‘ inittab

打印出整行不为数字的行,并显示行号。

grep -nv ‘[^0-9]‘ inittab

打印出整行为数字的行和空行,并显示行号。

技术分享图片



.表示任意一个字符。r.o表示r与o之间一个任意字符。

*表示零个或多个*前面的字符ooo*表示o、oo、ooo、oooo或者更多o。

grep -n ‘r.o‘ test

技术分享图片


grep -n ‘o*o‘ test(*表示0个或多个*前面的字符)#查找文件中 1个o两个o或者更多o的行。

匹配*前面的g,且还要匹配g之前必须是huan。

技术分享图片


grep -n ‘a*c‘ test 可以匹配到:

只含有字母c的,只含有字母a的,含有字母ac的

不能匹配到:不含字母a或字母c的。


.*表示零个或多个任意字符,空行也包含在内。

grep ‘.*‘ passwd

匹配passwd中的所有字符。

技术分享图片


{n},n为数字,表示{}前面的字符重复n次。需要注意的是{}左右都要加上转移字符\。{}还可以表示范围,{n1,n2}其中n1<n2,表示重复n1到n2次前面的字符,n2可以为空,表示大于等于n1次。

技术分享图片

技术分享图片


+表示匹配+前面的字符出现1个或多次(*匹配*前面的字符出现0次或多次)

grep使用+时需要用\ 转义

egrep使用+时不需要用\ 转义

技术分享图片


?表示匹配?前面出字符出现0次或1次

grep使用?时需要用\ 转义

egrep使用?时不需要用\ 转义

技术分享图片


|(数线)表示或者的意思

grep使用|时需要用\ 转义

egrep使用|时不需要用\ 转义

技术分享图片


()表示一个整体

grep使用|时需要用() 转义

egrep使用|时不需要用() 转义

技术分享图片


grep -n ‘\(aa\)\+‘ abc  过滤出含有一个或多个aa字符串的。

注意:grep命令使用:{}、+、?、|、()这些符号时需要加上转义符\。egrep 命令使用时不需要加转义符\。


本文出自 “网管的学习之路” 博客,请务必保留此出处http://754599082.blog.51cto.com/11510506/1983615

正则介绍、grep

标签:正则介绍、grep

原文地址:http://754599082.blog.51cto.com/11510506/1983615

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!