正则表达式

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

相关推荐

  • N21-北京-兔锅-马哥教育网络班21期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    who | cut -d' ' -f1 | uniq   2、取出最后登录到当前系统的用户的相关信息。    who | ta…

    系统运维 2016-07-07
  • 逻辑卷管理(LVM)

    逻辑卷管理(LVM) LVM概念 是系统上对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。 安装Linux系统时,最常见的问题是如何评估各分区大小,以分配合适的硬盘空间。随着LVM的出现,这些问题都引刃而解了,用户在无需停机的情况下方便地情况下方便的调整个分区的大小。 LVM重点在于可以弹性的调整文件系统的容量…

    Linux干货 2016-11-22
  • 书写博客的作用

    博客,一个对于我们是一个既贴近又遥远的词汇。在我们生活中常常听到这个词汇,但是很大的一部分人并不会去发布属于自己的博客。而我在这里会发表一些对于博客作用的认识,以供大家借鉴。

    2018-03-26
  • SElinux配置httpd

    一、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问     1、修改selinux策略并重启 [root@localhost ~]# vim /etc/selinux/config# This file controls the stat…

    Linux干货 2016-09-19
  • N28-第二周

    文件管理命令: cp命令:copy    源文件;目标文件; 单源复制:cp [OPTION]… [-T] SOURCE DEST多源复制:cp [OPTION]… SOURCE… DIRECTORYcp [OPTION]… -t DIRECTORY SOURCE… 单源复制:cp [OPTION]…

    Linux干货 2017-12-17
  • 马哥Linux第二周学习笔记

    文件管理,用户管理,权限管理

    Linux干货 2017-12-23