使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。
使用正则表达式时最好用单引号括起来,这样可以防止linuxjishu/14086.html target=_blank class=infotextkey>grep命令中使用的专有模式与一些shell命令的特殊方式相混淆。
2.1 模式范围
假定要抽取代码为4 8 4和4 8 3的城市位置,上一章中讲到可以使用[ ]来指定字符串范围,这里用4 8开始,以3或4结尾,这样抽出4 8 4或4 8 3。
2.2 不匹配行首
如果要抽出记录,使其行首不是4 8,可以在方括号中使用^记号,表明查询在行首开始。
2.3 设置大小写
使用- i开关可以屏蔽月份S e p t的大小写敏感,也可以用另一种方式。这里使用[ ]模式抽取
各行包含S e p t和s e p t的所有信息。
如果要抽取包含S e p t的所有月份,不管其大小写,并且此行包含字符串4 8 3,可以使用管
道命令,即符号“|”左边命令的输出作为“ |”右边命令的输入。举例如下:
不必将文件名放在第二个g r e p命令中,因为其输入信息来自于第一个g r e p命令的输出。
2.4 匹配任意字符
如果抽取以L开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:
将上述代码做轻微改变,头两个是大写字母,中间两个任意,并以C结尾:
2.5 日期查询
一个常用的查询模式是日期查询。
先查询所有以5开始以1 9 9 6或1 9 9 8结尾的所有记录。
使用模式5..199[6,8]。这意味着第一个字符为5,后跟两个点,接着是1 9 9,剩余两个数字是6或8。
查询包含1 9 9 8的所有记录的另外一种方法是使用表达式[ 0 - 9 ] { 3 } [ 8 ],含义是任意数字重复3次,后跟数字8,虽然这个方法不像上一个方法那么精确,但也有一定作用。
2.6 范围组合
必须学会使用[]抽取信息。假定要取得城市代码,第一个字符为任意字符,第二个字符在0到5之间,第三个字符在0到6之间,使用下列模式即可实现。
这里返回很多信息,有想要的,也有不想要的。参照模式,返回结果是正确的,因此这里还需要细化模式,可以以行首开始,使用^符号:
这样可以返回一个预期的正确结果。
2.7 模式出现机率
抽取包含数字4至少重复出现两次的所有行,方法如下:
上述语法指明数字4至少重复出现两次。同样,抽取记录使之包含数字9 9 9(三个9),方法如下:
如果要查询重复出现次数一定的所有行,语法如下,数字9重复出现两次:
有时要查询重复出现次数在一定范围内,比如数字或字母重复出现2到6次,下例匹配数字8重复出现2到6次,并以3结尾:
2.8 使用grep匹配“与”或者“或”模式
grep命令加- E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为219或216,方法如下:
2.9 空行
结合使用^和$可查询空行。使用- n参数显示实际行数:
2.10 匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ | + ? ,必须在特定字符前加。假设要查询包含"."的所有行,脚本如下:
或者是一个双引号:
以同样的方式,如要查询文件名conftroll.conf(这是一个配置文件),脚本如下:
2.11 查询格式化文件名
使用正则表达式可匹配任意文件名。系统中对文本文件有其标准的命名格式。一般最多六个小写字符,后跟句点,接着是两个大写字符。例如,要在一个包含各类文件名的文件filename.deposit中定位这类文件名,方法如下:
2.12 查询IP地址
查询DNS服务是日常工作之一,这意味着要维护覆盖不同网络的大量I P地址。有时地址I P会超过2 0 0 0个。如果要查看n n n . n n n网络地址,但是却忘了第二部分中的其余部分,只知有两个句点,例如n n n . n n . .。要抽取其中所有nnn.nnn IP地址,使用[0-9]{3}.[0-0 {3}。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。