正则表达式

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

相关推荐

  • PXE

    BootStraping 系统提供 PXE 简介 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file…

    Linux干货 2016-11-05
  • Linux第三周

    一.正则表达式和扩展正则表达式 1.首先有各种工具来对文本进行的查看,分析,统计   cat 命令:查看文本的工具    cat主要有三大功能:1.一次显示整个文件。$ cat filename2.从键盘创建一个文件。$ cat > filename     只能创建新文件,不能编辑已有文件.…

    2017-06-04
  • ls、shutdown命令使用及命令提示符格式修改

        ls、shutdown命令使用及命令提示符格式修改                      &nbs…

    Linux干货 2016-10-17
  • 35个强大的UI设计教程

    下面是35个非常不错的UI设计的的教程及效果图,非常不错哦。不但教你如何做一些特效,同样教你如何做UI布局和界面设计。当然,他们风格迥异,也基本上都是Web页面上的。都非常不错。希望你喜欢。(点击下面的图片可以打开相关的教程) Old Paper Layout Professional Modern Web Layout Photography portfo…

    Linux干货 2015-04-01
  • Shell脚本编程基础中() (()) [ ] [[ ]] 的使用

    Shell脚本编程基础中() (()) [ ] [[ ]] 的使用 () 生成子进程,括号内的命令将会在子进程中运行,父进程不能够读取在子进程中创建的变量 例: 新建个脚本文件,写入 则执行结果为 $()相当于 ` `  ,返回括号内命令执行结果 (( )) 用作四则运算和逻辑运算,并且支持多个表达式 例: 当 (( )) 加$,则是将获得表达式值,赋值给左…

    2017-11-26
  • Linux上实现rsyslog+mysql+loganalyz进行日志收集

    在我们的运维工作中,常常会对系统上的日志进行收集,手动管理少量的几台服务器的日志收集没有太大难度,但是企业当中批量的管理成千上万台服务器的时候,这时候想一台台的收集日志未免太浪费时间了,这时候我们需要一个批量管理日志的系统来解决这一难题,今天我给大家带来的使用 1、syslog介绍       &n…

    Linux干货 2016-10-24