正则表达式

Regual Expression

由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字面意义,而是用于控制或通配的功能 分类

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

程序支持:grep, vim, less,nginx等

分两类:

基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep

正则表达式引擎:

采用不同算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)

元字符分类:

字符匹配、匹配次数、位置锚定、分组

man 7 regex

基本正则表达式
扩展正则表达式

grep:文本过滤(模式:pattern)工具;

grep, egrep, fgrep(不支持正则表达式搜索)

sed:stream editor,文本编辑工具;

awk:Linux上的实现gawk,文本报告生成器;


二者区别元字符不同

grep:global search regular expression and print out the line

作用:文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行匹配检查,打印匹配到的行
模式:有正则表达式的元字符及文本字符所编写出的过滤条件
    grep [OPTIONS] PATTERN [FILE...]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    grep root /etc/passwd
    grep "$USER" /etc/passwd  #支持变量引用
    grep '$USER' /etc/passwd
    grep `whoami` /etc/passwd #支持命令引用

grep

常见选项:
--color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息
-A #:after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:实现多个选项间的逻辑or关系
    grep –e ‘cat ’ -e ‘dog’ file
-w:整行匹配整个单词
-E:使用ERE

egrep= grep -E

grep 要用PATTERN就要用引号把PATTERN引上。

正则表达式的元字符

字符匹配----单个字符

    .:点号匹配任意单个字符
    []:匹配指定范围内的任意单个字符
    [^]:匹配指定范围外的任意单个字符

    字符集合--代表集合中的所有字符
    Within  a bracket expression, the name of a character class enclosed in 
    "[:" and ":]" stands for the list of all characters belonging to
    that class.  Stan‐dard character class names are:

          alnum   digit   punct
          alpha   graph   space
          blank   lower   upper
          cntrl   print   xdigit

    字符集合在模式中必须为   [[:xxxx:]]  格式代表字符集中的一个

    字符集合与其他字符使用时[a[:xxxx:]b]      [^[:xxxx:]]  

        [:digit:],[:lower:],[:upper:],[:alpha:],[:punct:],[:space:],[:alnum:]



匹配次数-----------(正则表达式工作在贪婪模式下有多长匹配多长)用在要指定其出现的次数的字符的右侧,用户限制其前面字符出现的次数。

    *:  匹配其前面字符任意次--0,1或多次(可有可无或重复多次)
    .*  匹配任意长度的任意字符
    \?  匹配其前的字符0次或1次,即前面的字符可有可无
    \+  匹配其前面的字符1次或多次,即前面的字符出现至少一次

    \{m\}匹配其前面的字符m次,精确次数匹配
        \{m,n\}匹配前面的字符至少m次,至少n次
        \{0,n\}匹配前面的字符至多n次
        \{m,\}匹配前面的字符至少m次,多了不限

位置锚定---锚定整个patter

    ^:行首锚定;用于模式的最左侧
    $:行尾锚定;用模式的最右侧
    ^PATTERN$:用于匹配整行
    ^$:空白行锚定,没有任意字符(包括空白字符)
    ^[[:space:]]*$:空白行或包含空白字符的行

    单词:非特殊字符组成的------连续字符(的字符串包括数字)都称为单词

        \<或\b:词首锚定,用于单词模式的左侧
        \>或\b:词尾锚定,用于单词模式的右侧
        \<PATTERN\>匹配完整单词
        \bPATTERN\b

分组及引用 \(PATTER\)或\(指定的字符串\)
    \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理
    \(xy\)*ab
    xy出现0次1次或多次
    注:分组括号中的模式匹配到的内容,会被正则表达式引擎自动记录于内部的变量中,这些变量为
    \1
    \2
    \3
    ......
后向引用:
grep “\(l..e\)*\1”
引用前面的分组括号中的模式所匹配到的字符

扩展正则表达式的元字符

字符匹配
    .:任意单个字符
    []:指定范围内的任意单个字符
    [^]:指定范围外的任意单个字符
    次数匹配
    *:任意次0,1或多次
    ?:0次或1次
    {m}匹配其前字符m次
    {m,n}:匹配其前字符最少m次,最多n次
    {0,m}:匹配其前字符最多m次
    {m,}:匹配最少m次
位置锚定
    ^:行首锚定
    $:行尾锚定
    \<:词首锚定
    \>:词尾锚定
或
    a|b  整个右侧或左侧
    C|cat   C或cat
    (C|c)at     Cat或cat

分组及引用:
    ():分组
        后向引用:
        \1
        \2
        \3

grep

支持基本正则表达式
-E支持扩展正则表达式
-F不使用正则表达式

egrep

支持扩展正则表达式
-G支持基本正则表达式
-F不使用正则表达式

fgrep

当无需要用到元字符去编写模式时,使用fgrep性能更好

不支持正则表达式
-E支持扩展正则表达式
-G支持基本正则表达式

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

(0)
yywyyw
上一篇 2016-08-07 22:06
下一篇 2016-08-07 22:06

相关推荐

  • 网络基础

    计算机网络     计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 1、网络通信设备     网络通信设备种类繁多,且日新月异,网络通信设备通常由网络线缆、网卡、集线器、中继器、网桥、交换机、路由器等组成。 网桥(Bri…

    Linux干货 2016-12-16
  • find命令、归档压缩工具、xargs、exec、tar、xz、cpio

    find命令、归档压缩工具、xargs、exec、tar、xz、cpio find命令 Linux中的文件查找工具常见的有locate和find以及whereis.他们适用于不同的场合,如whereis只能用于搜索程序的二进制文件、源代码文件和man手册等相关文件,find和local能够查找磁盘上的所有文件(不包括proc和sys目录下的虚拟文件)。fin…

    Linux干货 2016-08-18
  • 马哥教育网络第21期-第十一周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 A和B进行通信 A发送数据:A使用单向加密算法获得数据的特征码,把特征码附加到数据的尾部,A使用对称加密算法对数据进行加密。A使用B发过来的公钥对A的对称加 密算法加密密钥进行加密,附加到数据后面。 B接收方:B使用自己的私钥对数据进行解密。得到A的对称密钥,对对称密钥解密获得数据的特征码,B使用单向加密算法获…

    Linux干货 2016-12-26
  • 马哥教育网络班21期+第1周课程练习

    一、计算机原理及组成部分 数学家冯·诺依曼,按不同功能把计算机分成了五大组成部分:运算器、控制器、存储器、输入设备、输入出设备。 现代计算机把运算器和控制器集成在一起,称为CPU,主要进行各种数据运算和对各种命令进行解释;存储器被分为两类,一类以内存为代表的随机存储设备,主要特点是速度快,容量有限,断电后信息就消失,另一类是硬盘为代表的外部存储设备,容量大,…

    Linux干货 2016-06-26
  • 第五周作业

    1. 显示当前系统上root、fedora或user1用户的默认shell; grep -E "^(root|centos|user1)\>" /etc/passwd 或 awk -F: '{if($1=="root" || $1==…

    Linux干货 2017-01-10
  • N25第四周 chmod chown以及 grep命令的常用示例

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。     [root@localhost ~]# cp -r /etc/skel /home/tuser1   &n…

    Linux干货 2016-12-22