正则介绍grep
正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。 grep工具 该命令的格式为:grep [-cinvABC]‘word’ filename,其常用的选项如下所示。 -c 表示打印符合要求的行数。 -i 表示忽略大小写。 -n 表示输出符合要求的行及其行号。 -v 表示打印不符合要求的行。 -A 后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行。 -B后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行。 -C 后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行。 过滤出带有某个关键词的行,并输出行号 示例命令如下: #grep –n ‘root’ /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin 过滤出不带有某个关键词的行,并输出行号 #grep –nv ‘root’ /etc/passwd 6:sync:x:5:0:sync:/sbin:/bin/sync 过滤出所有包含数字的行 #grep ‘[0-9]’ /etc/inittab #multi-user.target:analogous to runlevel 3 #graphical.target:analogous to runlevel 5 过滤出所有不包含数字的行 #grep –v ‘[0-9]’ /etc/inittab 过滤掉所有以#开头的行 #cat /etc/sos.conf [plugins] [tunables] #rpm.rpmva = off #general.syslogsize = 15 #grep –v ‘^#’ /etc/sos.conf [tunables] 过滤掉所有空行和以#开头的行 #grep –v ‘^#’ /etc/sos.conf |grep –v ‘^#’ [plugins] 过滤出任意一个字符和重复字符 #grep ‘r.o’ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin .表示任意一个字符。上例中,r.o表示把r与o之间有一个任意字符的行过滤出来。 #grep ‘ooo*’ /etc/passwd *表示零个或多个*前面的字符。上例中,ooo*表示oo、ooo、oooo……或更多的o。 指定要过滤出的字符出现次数 #grep ‘o{2}’ /etc/passwd 符号{ },其内部为数字,表示前面的字符要重复的次数。需要强调的是,{}作用都需要加上转义字符。另外使用“{ }”还可以表示一个范围,具体格式为{n1,n2},其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,这时表示大于等于n1次。 egrep工具 egrep 是grep的扩展版本,可以完成grep不能完成的工作。下面介绍egrep不同于grep的几个用法。为了试验方便,先编辑一个test.txt,其内容如下: rot:x:0:0:rot: /bin/bash operator:x:11:0:operator:/rooot:/sbin/nologin roooot:x:0:0:rooooot: /bin/bash 2222222222222222222222222111 aaaaaaaaaaaaaaaaaaaaaaaaa 过滤出一个或多个指定的字符 示例命令如下: #egrep ‘o+’ test.txt #egrep ‘oo+’ test.txt #egrep ‘ooo+’ test.txt 和grep不同,这里egrep使用的是符号+,它表示匹配1个或多个+前面的字符,这个“+”是不支持被grep直接使用的。包括上面的{},而egrep可以,而不用加转义。示例如下: #egrep ‘o{2}’ /etc/passwd root:x:0:0:root:/root:/bin/bash 过滤出零个或一个指定的字符 #egrep ‘o?’ test.txt aaaaaaaaaaaaaaaaaaaaaaaaa #egrep ‘ooo?’ test.txt roooot:x:0:0:rooooot: /bin/bash #egrep ‘oooo?’ test.txt roooot:x:0:0:rooooot: /bin/bash 过滤出字符串1或字串符2 #egrep ‘aaa|111|ooo’ test.txt egrep中()的应用 #egrep ‘r(oo|at)o’ test.txt 这里用()表示一个整体,上例中会把包含rooot或者rato的行过滤出来,另外也可以把()和其他符号组合在一起,例如(oo)+就表示1个或者多个oo。如下所示: #egrep ‘r(oo)+’ test.txt roooot:x:0:0:rooooot: /bin/bash (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |