grep命令中正则表达式的用法,包括模式范围、匹配任意字符、匹配特殊字符与查询ip地址等操作。
使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。
2.1 模式范围
$ grep '48[34]' data.f
483 Sept 5ap1996 USP 65.00 LVX2C 189 484 nov 7pl1996 CAD 49.00 PLV2C 234 483 MAY 5PA1998 USP 37.00 KVM90 644
2.2 不匹配行首
$ grep '^[^48]' data.f
219 Dec 2cc1999 CAD 23.00 PLV2C 68 216 sept 3zl1998 usp 86.00 kvm9m 234
2.3 设置大小写
$ grep '[Ss]ept' data.f
216 sept 3zl1998 usp 86.00 kvm9m 234 483 Sept 5ap1996 USP 65.00 LVX2C 189
如果要抽取包含S e p t的所有月份,不管其大小写,并且此行包含字符串4 8 3,可以使用管
$ grep '[Ss]ept' data.f | grep 483
483 Sept 5ap1996 USP 65.00 LVX2C 189 不必将文件名放在第二个g r e p命令中,因为其输入信息来自于第一个g r e p命令的输出。
2.4 匹配任意字符
$ grep 'X...D' data.f
47 Oct 3zl1998 LPSX 43.00 kvm90 512 483 Sept 5ap1996 USP 65.00 LVX2C 189
将上述代码做轻微改变,头两个是大写字母,中间两个任意,并以C结尾:
$ grep '[A-Z][A-Z]...C' data.f
219 Dec 2cc1999 CAD 23.00 PLV2C 68 483 Sept 5ap1996 USP 65.00 LVX2C 189 484 nov 7pl1996 CAD 49.00 PLV2C 234
2.5 日期查询
$ grep '5..199[6,8]' data.f
483 Sept 5ap1996 USP 65.00 LVX2C 189 483 MAY 5PA1998 USP 37.00 KVM90 644
查询包含1 9 9 8的所有记录的另外一种方法是使用表达式[ 0 - 9 ] \ { 3 \ } [ 8 ],含义是任意数字重复3次,后跟数字8,虽然这个方法不像上一个方法那么精确,但也有一定作用。
$ grep '[0-9]\(3\)[8]' data.f
47 Oct 3zl1998 LPSX 43.00 kvm90 512 216 sept 3zl1998 usp 86.00 kvm9m 234 483 Sept 5ap1996 USP 65.00 LVX2C 189
2.6 范围组合
$ grep '[0-9][0-5][0-6]' data.f
47 Oct 3zl1998 LPSX 43.00 kvm90 512 48 Dec 3BC1997 LPSX 68.00 LVX2A 138 219 Dec 2cc1999 CAD 23.00 PLV2C 68 216 sept 3zl1998 usp 86.00 kvm9m 234 483 Sept 5ap1996 USP 65.00 LVX2C 189 484 nov 7pl1996 CAD 49.00 PLV2C 234 483 MAY 5PA1998 USP 37.00 KVM90 644
这里返回很多信息,有想要的,也有不想要的。参照模式,返回结果是正确的,因此这里还需要细化模式,可以以行首开始,使用^符号:
$ grep '^[0-9][0-5][0-6]' data.f
216 sept 3zl1998 usp 86.00 kvm9m 234 这样可以返回一个预期的正确结果。
2.7 模式出现机率
$ grep '4\{2,\}' data.f
483 MAY 5PA1998 USP 37.00 KVM90 644
上述语法指明数字4至少重复出现两次。同样,抽取记录使之包含数字9 9 9(三个9),方法如下:
$ grep '9\{3,\}' data.f
219 Dec 2cc1999 CAD 23.00 PLV2C 68
如果要查询重复出现次数一定的所有行,语法如下,数字9重复出现两次:
$ grep '9\{2\}' data.f
有时要查询重复出现次数在一定范围内,比如数字或字母重复出现2到6次,下例匹配数字8重复出现2到6次,并以3结尾:
$ grep '6\{2,6}3' myfile
83 - no match 888883 - match 8884 - no match 88883 - match
2.8 使用grep匹配“与”或者“或”模式
$ grep -E '219|216' data.f
219 Dec 2cc1999 CAD 23.00 PLV2C 68 216 sept 3zl1998 usp 86.00 kvm9m 234
2.9 空行
$ grep '^$' myfile
2.10 匹配特殊字符
$ grep '\.' myfile
或者是一个双引号:
$ grep '\"' myfile
以同样的方式,如要查询文件名conftroll.conf(这是一个配置文件),脚本如下:
$ grep 'conttroll\.conf' myfile
2.11 查询格式化文件名
$ grep '[^a-z]\{1,6/}\.[^A-Z]\{1,2/}' myfile
yrend.AS - match monthdf - nomatch soa.pp - match qp.RR - match
2.12 查询IP地址
$ grep '[0-9]\{3\}\.[0-0\[3\}\.' ipfile
(责任编辑:IT) |