正则表达式

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
下一篇 2016-08-07

相关推荐

  • 命令组合实战

    1 列出/etc/下以。conf结尾的文件 [redsun@jiange root]$ ls  /etc/*.conf | tr 'a-z' 'A-Z'  | sed 's/ETC/etc/' > /tmp/etc.conf [redsun@jiange root]$ mo…

    Linux干货 2016-11-13
  • bash的基础特性[更新中]

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │   └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │   ├── bin
    │   └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-03-17
  • Shell脚本编程之入门基础(二)if、case的使用

    Shell编程之条件选择和条件判断   一、条件选择(if)与条件判断(case)的对比: if语句:是选择执行,if语句可嵌套。 if条件选择使用格式 单分支 双分支 多分支 if 判断条件;then 条件为真的分支代码 fi if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi if CONDITION1; the…

    Linux干货 2016-08-15
  • bash功能特性三 命令的引用、展开和补全

    一、bash的补全功能     1、命令补全     根据内建命令或外部命令的查找方式,查找以用户指定的字符串开头的命令,如果用户指定的开头字符串能惟一标识某命令,则tab键可以补全此命令,否则,则两次tab链可显示所有以指定字符串开头的命令。   &nbsp…

    Linux干货 2015-04-15
  • 开发团队的效率

    我之前写过一篇叫《加班与效率》的文章,从概念上说了一些我对“效率”的认识,但是那篇文章趋于概念化,对于一些没有经历过这样的环境的同学来说,可能会觉得太抽象了。很早以前就想写一篇更具体一点的,可执行的文章与《加班与效率》这篇文章相辉映,并再把我两年前在杭州QCon上的那个“鼓吹工程师文化”的《建一支强大的小团队》(新浪微盘)的观点再加强一下。 但是我遇到了一些…

    Linux干货 2016-08-15
  • Linux-start

    学习计划:参见N24学习时间与线路图. 目标:完成作业,考试过关。 宣言:人但有追求,世界亦会让路。

    Linux干货 2016-10-24