正则介绍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都显示出来。
原文地址:http://blog.51cto.com/13576245/2084797