grep是个什么鬼

正则表达式

  一个正则表达式是一个描述了一个字符串集合的模式。正则表达式的构造类似于算术表达式,使用各种各样的操作符来将更小的表达式连在一起。

Grep能理解两种不同版本的正则表达式语法:“basic”和“extended”。在GNU grep中,两种语法可以实现的功能是没有区别的。在其他实现中,基本(basic)正则表达式表达能力要弱一点。下面的描述适用于扩展的(extended)正则表达式,它与基本正则表达式的区别会在最后做一个总结。

基本的构造块是匹配单个字符的正则表达式。大部分字符,包括所有字母和数字,是匹配它们自身的正则表达式。任何具有特殊含义的元字符可以通过前置一个反斜杠来引用。

1元字符

方括号表达式(bracket)是一个字符序列,放在 [ ] 当中。它匹配序列中的任何一个字符;如果序列中的第一个字符是脱字符(caret) ^ 那么它匹配不在序列中的任何一个字符。例如,正则表达式 [0123456789] 匹配任何一个数字。

在方括号表达式之中,一个范围表达式(range)由两个字符组成,中间用一个连字符    (hyphen)分隔。它匹配在这两个字符之间的任何一个字符,使用本地化的序列顺序和字符集。(that sorts between the two characters,inclusive, using the locale’s  collating sequence and character set.)  例如,在默认的  C locale中,[a-d][abcd]等价。

许多 locale 将字符以字典顺序排序,在这些 locale 中,[a-d]不与[abcd]等价;例如它可能与[aBbCcDd]等价。

  最后,在方括号表达式中有一些预定义 的字符类,如下所示。它们的名字是自说明的,它们是[:alnum:](字母和数字), [:alpha:](字母), [:cntrl:](控制字符), [:digit:](数字), [:graph:](图形字符), [:lower:](小写字母),[:print:](可打印字符),[:punct:](标点符号),[:space:](空格),[:upper:](大写字母),[:xdigit:](十六进制数字)

[:alnum:]

字母和数字

[:cntrl:]

控制字符

[:alpha:]

字母

[:print:]

可打印字符

[:lower:]

小写字母

[:punct:]

标点符号

[:upper:]

大写字母

[:space:]

空格

[:digit:]

数字

[:graph:]

图形字符

[:xdigit:]

十六进制数字

例如, [[:alnum:]] 意思是[0-9A-Za-z],但是后一种表示方法依赖于  locale CASCII字符编码,而前一种是与locale和字符集无关的。(注意这些字符类名中的方括号也是符号名称的一部分,必须包含在用来为序列定界的方括号之中。)

  大多数元字符处于序列中时会失去它们的特殊意义。为了包含一个字面意义(literal)的 ,需要将它放在序列的最前。与此相似,为了包含一个字面意义(literal)^,需要将它放在除了序列最前之外的其他位置。最后,为了包含一个字面意义(literal) 需要将它放在序列最后。

   句点符(period)  .  匹配任何一个字符。符号\w[[:alnum:]]的同义词,\W[^[:alnum]]的同义词。

   脱字符(caret)^和美元标记(dollar)$分别是匹配一行的首部和尾部的空字串的元字符。

   符号\<\>分别是匹配一个词的首部和尾部的空字串的元字符。

   符号\b匹配一个词边缘(edge)的空字串,符号\B匹配不处于一个词的边缘的空字串

2重复操作符

  一个正则表达式后面可以跟随多种重复操作符之一。

   ? 前的项是可选的,最多匹配一次。

   * 前的项可以匹配零次或多次。

   + 前的项可以匹配一次或多次。

   {n} 前的项将匹配恰好n次。

   {n,} 前的项可以匹配n或更多次。

   {n,m} 前的项将匹配至少n词,但是不会超过m次。

  两个正则表达式可以连接到一起;得出的正则表达式可以匹配任何由两个分别匹配连接前的子表达式的子字符串连接而成的字符串。两个正则表达式可以用中缀操作符|将它们联合到一起,得出的正则表达式可以匹配任何匹配联合前的任何一个子表达式的字符串。

 重复操作符的优先级比连接高,接下来又比选择的优先级高。一个完整的子表达式可以用圆括号(parentheses)括住来超越这些优先级规则。反向引用 \n 中, n 是一个数字,匹配正则表达式中,以第 n 个圆括号括住的子表达式已匹配的子字符串。

在基本正则表达式中,元字符  ?,  +,  {, |, (, ) 丧失了它们的特殊意义;作为替代,使用加反斜杠的 (back]2slash) 版本 \?, \+, \{, \|, \(, \)

  传统的 egrep 不支持元字符 { ,并且一些 egrep 的实现通过支持  \{  来代替它,因此可移植的脚本应当避免在egrep 中使用 { 模式,应当使用 [{] 来匹配一个字面意义 (literal) { (上面提到大部分元字符放入方括号中会失去特殊意义)

  

原创文章,作者:TQT,如若转载,请注明出处:http://www.178linux.com/73566

(0)
TQTTQT
上一篇 2017-04-17 19:44
下一篇 2017-04-17 20:20

相关推荐

  • 计算机基础第一部分

    ** 第一课:计算机基础知识** 第一章计算机的组成 计算机是由硬件(Hardwaer)和软件(Software)来组成两大类,他是一台可以自由传输数据, 储存数据,娱乐,工作等等的智能设备。 第一节计算机硬件 主板架构图 内存====用来存储临时数据,弱点喜欢松动一般电脑黑屏都是他松动了,导致电脑不能机 基本上%80以上的电脑不能开机都是他出了问题,服务器…

    Linux干货 2017-05-19
  • 正则表达式基础以及grep的简单使用

    正则表达式基础以及grep的简单使用   1,定义 正则表达式是你所定义的模式模板,Linux可以用它来过滤文本。Linux工具(比如grep、sed、gawk)能够在处理数据时使用正则表达式对数据进行模式匹配。如果数据匹配模式,它就会被接受并进一步处理;如果数据不匹配,它就会被滤掉。 2,正则表达式的原则 (1)正则表达式模式都区分大小写。(2)…

    2017-04-09
  • 马哥教育网络班22期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;       [root@localhost ~]#…

    Linux干货 2016-10-09
  • 2016全球运维大会,优云蒋君伟演讲“CMDB+自动化的管理融合”成一大亮点

    2016全球运维大会于9月23日-24日在上海盛大开幕。作为国内运维行业的重量级大会,优云产品总监蒋君伟在自动化专场与来自全国各地的运维同行一起探讨、分享业内自动化运维的最佳实践。现场情绪热烈,气氛高涨,成为了本届全球运维大会的一大亮点。 全新梳理自动化与CMDB的融合之道 全球运维大会当天,运维自动化专场很多大牛针对自动化运维管理中的CMDB进行了激烈的讨…

    Linux资讯 2016-12-05
  • linux中bash的基础特性和基本文件管理命令

    linux的文件管理类命令 linux系统下的涉及到目录管理命令,主要有 mkdir,rmdir linux系统下也会用到许多文件查看类命令,包括cat,tac,head,tail,more,less等 linux系统下涉及的文件管理类命令主要有cp,mv,rm 本节我们主要说明文件管理类命令的使用方法。 cp命令的使用方法 首先,cp这个命令的作用是可以复…

    Linux干货 2016-09-26
  • 第一周的学习总结

       本人是Linux 小白,0基础。加入马帮开始Linux之旅。由于完全不懂Linux,所以在学习的过程中,每课都要看上2遍。接下来说说我第一周所学的内容。 首先是了解到了计算机基础知识,计算机的组成部分、CPU架构类型、其他外围设备。 操作系统基础知识进程管理、内存管理、网络管理、驱动管理、安全管理等。 Linux的起源、发行版以及构…

    Linux干货 2016-02-28

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:09

    主要介绍了grep命令中的正则表达式的用法 ,内容介绍的很详细,可以适当的加几个示例进来