文档章节

第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)

henni_719
 henni_719
发布于 2017/04/22 17:18
字数 1789
阅读 2
收藏 0

7.5定义BRE模式

         最基本的BRE模式是匹配数据流中的文本字符。

7.5.1纯文本

         sed编辑器和gawk程序中如何使用标准的文本字符串筛选数据。正则表达式并不关心模式出现在数据流中的位置。模式出现的次数也无关紧要。一旦表达式能够在文本字符串的任何位置匹配该模式,它就将字符串传递给使用它的Linux使用程序。

         关键是匹配正则表达式模式和数据流文本。重要的是要记住正则表达式在匹配模式时异常挑剔。要记住的第一条规则是正则表达式模式区分大小写

         在正则表达式中,不必局限于完整的单词。如果所定义的文本出现的数据流的任意位置,正则表达式都将匹配。在正则表达式中,不必局限于单个单词,也可以在文本字符串中包含空格和数字

        

7.5.2特殊字符

         正则表达式赋予几个字符特殊的含义。如果在文本模式中试图使用这些字符,就可能得不到预期的结果。正则表达式认可的特殊字符有:.*[]^${}\+?|()

         如果要使用这些特殊字符中的一个作为文本字符,需要转义它。转义特殊字符时,需要在特殊字符的前面加一个特殊字符,向正则表达式引擎说明:它应该将下一个字符解释为普通文本字符。

         操作操作实例如下:

         

7.5.3定位符

         默认情况下,在指定正则表达式模式时,只要模式出现在数据流之中,就匹配。有两个特殊字符可以用来将模式定位到数据流行的开头或结尾。

         1.从头开始

         脱字符(^)定义从数据流中文本行开头开始的模式。如果该模式位于文本行的其他任意位置,正则表达式失败。要使用脱字符,需将它放在正则表达式指定的模式之前。脱字符定位符在各个新数据行的开头检查模式。

         如果将脱字符放在模式的其他位置,它就充当普通字符而不再作为特殊字符。

        

         第一个实例:以大写字母开头且后续为ime的单词的行;第二个实例:打印以大写字母开头的行;第三个实例:^充当普通字符,打印文中出现w ^的行;第四个实例:打印以小写字母i开头的行;第五个实例:脱字符不在模式的开头。

         2.查找结尾

         与在一行开始查找模式相反的是在行为查找它。美元符号($)特殊字符定义结尾定位。在文本模式之后添加特殊字符表示行必须以此文本模式结尾。

        

         结尾文本模式要检查的内容必须仔细,不然与正则表达式模式不在匹配。

         3. 联合定位

         两种常见情况是要在同一行将开始和结尾定位符相结合。第一种情况:假设要查找仅包含某一特定文本模式的数据行,sed编辑器会忽略除包含特定文本之外的行。第二种情况:将两个定位符在没有文本的模式中结合在一起,可以筛选数据流中的空行。

         具体操作实例:

          

         第一个实例:找到开头为dog与结尾为dog的行并修改该行数据流信息;第二个实例与第一个实例功能类似,只不过打印所有的数据流;第三个实例:把空行修改成成相应的数据流信息并输出整个数据流。

7.5.4点字符

         点特殊字符用于匹配除换行符之外的任何单个字符。但点字符必须匹配一个字符;如果在圆点位置没有任何字符,那么模式匹配失败。

   

    第一个实例:匹配单词为go开头的行;第二个实例:匹配单词中含有ave的行;第三实例:匹配单词中含有o的行。

         在正则表达式中,空格作为字符记。

7.5.5字符类

         点特殊字符适合匹配某一字符位置上的任意字符,但如果要限制匹配的字符,需要在正则表达式中定义一个字符类。

         可以定义一类字符来匹配文本模式中的某一位置。如果该字符类中的字符之一在数据流中,它就和模式匹配。

         为定义字符类,要使用方括号。应该将要包括在该类中的所有字符用方括号括起来。正则表达式可以出现在数据流文本的任何地方。

         操作实例:

        

         第一个实例:打印包含acf字符的行;第二个实例:打印包含Have或have的行;第三实例:打印包含Have或have的行,打印包含类似good、goes、god等字符的行。

7.5.6否定字符类

         在正则表达式模式中,也可以查找不在字符类中的字符。只需在字符类范围的开头添加脱字符。

        

         通过否定字符类,正则表达式可以匹配除H但带有ave的单词的行,本例子匹配不带有Have的行。

7.5.7 使用范围

         通过使用短划线符号(-)可以在字符类中使用一系列字符范围。只需指定范围内的第一个字符、短划线,然后是范围内的最后一个字符。根据Linux系统使用的字符集,正则表达式包括指定字符范围内的所有字符。

        

         第一个实例:匹配开头为G到K或g到k开头且后面内容为ave的单词的行;第二个实例:匹配带有0到5的数字的行。

7.5.8 特殊字符类

         除定义的字符类,BRE还包含特殊字符类,还可以用于匹配特定类型的字符。可以使用的BRE特殊字符如下:

        

         在正则表达式中,完全可以像使用普通字符类一样使用特殊字符类:

        

         使用特殊字符类是定义范围的一种简单范围。

7.5.9 星号

         在某个字符之后加一个星号表示该字符必须在匹配模式的文本中不出现或出现多次。该模式符号常用于处理语言拼写中常见的错误拼写或变化的单词。

         使用这个模式,可以方便地搜索出现在数据流中一行文本上任意位置的多个单词。还可以将星号应用于字符类。允许指定在文本中多次出现的一组或某一范围的字符。

         常用实例:

         

© 著作权归作者所有

共有 人打赏支持
henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
第十八章 文本处理流编辑器:sed命令

第十八章 文本处理流编辑器:sed命令 名词解释 sed 是一种流编辑器,它是文本处理常用到的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称...

506554897
2018/07/18
0
0
Linux/Unix工具与正则表达式的POSIX规范--awk使用中遇到的坑

对正则表达式有基本了解的读者,一定不会陌生『d』、『[a-z]+』之类的表达式,前者匹配一个数字字符,后者匹配一个以上的小写英文字母。但是如果你用过vi、grep、awk、sed之类Linux/Unix下的...

流浪的洋葱
2014/11/20
0
0
linux下的文本处理命令sed&awk&grep

SedSed sed 是个精简的、非交互式的编辑器。他能执行和编辑vi和emacs相同的编辑任务。sed编辑器不提供交互使用方式:只能在命令行输入编辑命令、指定文件 名,然后在屏幕上察看输出。sed编辑...

阿秀a
2011/09/15
0
0
linux下grep、awk和sed工具用法概览

linux下grep、awk和sed工具用法概览 在linux下,grep、awk和sed是非常强大的文本处理工具,其中grep命令主要用作文本搜索,而awk和sed命令侧重于文本的编辑等操作,另外awk本身还可以是编程语...

小陶小陶
2018/09/11
0
0
linux中行编辑器sed的基本用法

linux中行编辑器sed的基本用法 sed的处理方法 默认逐行读取文件到内存中---->把符合模式的行读取到属于sed的内存中(sed的模式空间)进行编辑---->将处理后模式空间的内容显示到屏幕上 sed:行编...

fuvip
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js算法总结

数列求和 等差数列求和 function sum(a0,d,n){//a0->首项,d->公差,n->项数//(首项+末项)*项数/2return (a1+(a1+d*n))*n/2;} 等比数列求和 function sum(a0,q,n){//a0->首项,q->公......

祖达
33分钟前
1
0
小白?转型?毕业生?外行学习快速入行大数据开发指南

这篇文章中,本文将针对三种不同的、想要进入数据科学领域的人群,给出自己的经验,帮助他们迅速有效入行。 虽然没有适合每个人的万能解决方案,但这三类建议值得想转行的你一看。 第1类:新...

董黎明
41分钟前
1
0
好文 | MySQL 索引B+树原理,以及建索引的几大原则

MySQL事实上使用不同的存储引擎也是有很大区别的,下面猿友们可以了解一下。 一、存储引擎的比较 注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义是有区别的。 ...

Java爬坑之路
44分钟前
1
0
mysql group by 和 Order By 执行顺序

1.在写统计的时候,我们会用到统计首单,这样里面设计到排序。写子查询的方式当然可以实现, 但是我们有时候,需要创建视图,视图不支持带子查询的。 加了排序后会返回,排序后的哪个第一条数...

kuchawyz
48分钟前
2
0
Spring Boot 2.X 如何添加拦截器?

最近使用SpringBoot2.X搭建了一个项目,大部分接口都需要做登录校验,所以打算使用注解+拦截器来实现,在此记录下实现过程。 一、实现原理 1. 自定义一个注解@NeedLogin,如果接口需要进行登...

花漾年华
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部