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

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

时间:2018-03-10 14:03:20      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:grep   egrep   

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

正则介绍grep

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

它是一种思想、一种表示方法。只要使用的工具支持这种表示方法,那这个工具就可以处理正则的字符串。常用工具有grep、sed、awk等,其中grep、sed、awk都是针对文本的行进行操作的。

grep/egrep工具

grep [-cinvABC] 'word' filename    

最简单用法:后面跟个关键词,再跟文件名

-c:行数

-i:不区分大小写

-n:显示行号

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

-r:遍历所有子目录

-A:后跟数字,过滤出符合要求的行以及下面n行

-B:同上,过滤出符合要求的行以及上面n行

-C:同上,同时过滤符合要求的行以及上下各n行

-r选项示例:

# grep -r 'root' /etc/  

会将/etc/下所有子目录里包含有root的文件全部列出来。

若不加-r

# grep  'root' /etc/

grep: /etc/: 是一个目录

会告诉你/etc/是一个目录。

不加-r就只能针对文件做。

# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

# grep -r 'root' /etc/ > /tmp/grep.log

# grep passwd /tmp/grep.log

先将/etc/下有root的内容写入到/tmp/grep.log文件里去,再从中过滤出passwd。

一个目录下,过滤所有*.php文档中含有eval的行

# grep -r --include="*.php" 'eval' /data/

# grep -A2 'root' passwd

# grep -B2 'root' passwd  上面没有,就没列出来

root:x:0:0:root:/root:/bin/bash

--

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

正则

grep(中括号用grep)

# grep '[0-9]'  passwd  将带有[0-9]的数字行全部列出来,也可以逗号[0,9],只过滤带0和9的行。

# grep -v '[0-9]'  passwd  过滤出不带[0-9]的行

# grep -v '^#' inittab   将以#开头的行全都不显示出来,一般常用于看配置文件,直接过滤掉注释行(以#开头的行)。

# grep '[^0-9]' inittab  将非[0-9]的所有字符都显示出来。

# grep '^[^0-9]' inittab  将以非[0-9]开头的显示出来。

# grep -v '^[^0-9]' inittab  相反的行,以[0-9]开头的

# grep 'r.o' passwd  此处的“.”代表任意字符,将包含r.o,中间不管什么字符都显示出来。

# grep 'r*o' passwd  以r开头的字符重复0-n次,or,或者ro都可显示出来,只要是这两个字符,别的不行。

user3:x:1002:1004::/hrlrrroorome/user3:/bin/bash

# grep '.*' passwd  .*表示任意字符,甚至包括空行。

# grep 'dbus.*' passwd

dbus:x:81:81:System message bus:/:/sbin/nologin

# grep 'dbus.*login' passwd

dbus:x:81:81:System message bus:/:/sbin/nologin

egrep(小括号,花括号用egrep)

# grep 'o\{2\}' passwd  表示o出现两次

# grep 'o\{0,3\}' passwd   0至3次都匹配

# grep -E 'o{2}' passwd

# egrep 'o{2}' passwd

# egrep '(oo){2}' passwd  小括号,两个oo,范围

脱义,-E,egrep。任意使用一个

# egrep 'o+r' passwd  +和*类似。表示匹配1个或多个+前面的字符。

# egrep 'o?r' passwd    

?表示?前面的字符重复次数为0或1,有就显示or,没有就显示r。

# egrep 'root|nologin' passwd  竖线,代表或者的意思,root或者nologin都显示出来。


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

标签:grep   egrep   

原文地址:http://blog.51cto.com/13576245/2084797

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