zoukankan      html  css  js  c++  java
  • liunx正则危险符号“*”星号

    liunx正则的符号,危险符号“*”,下面介绍它是如何危险的

    *:在正则中表示匹配0次或者1次或者多次,注意他的贪婪性

    1.*与grep连用----使用正常

    新建一个文本文件,内容如下

     cat 与grep连用,红色表示匹配成功,匹配原理

     匹配原理:

    一行:在第二个b查找了b,所以能匹配了b,匹配一次原理

    第二行:查询到第一个b匹配,有查找到第二个b,也可匹配,匹配多次原理

    第二行:查询到第一个b匹配,有查找到第二个b,查询到第个b,也可匹配,匹配多次原理

    而grep匹配的0次,匹配不成

    2.*与sed连用-----使用危险

    sed符号是一个替换符号,用于文件替换,现在我们像grep一样,把b替换成z,按照我最开始的写法,只要有b的都替换成z,所以写法是

    sed “s/b*/z/g”  含义sed  "s/查找字符/替换字符/全局替换",但是下面的结果另外们大吃一惊,为什么会这样

    原始字符

     替换后的字符

    猜测原因:

    1.在匹配时把字符拆成,前中后,3段

    第一行:第一个字符为a,匹配到了0个,前面匹配成z,保留了a,第二个字符找到了b,替换成z, 第三个字符c也是匹配到0个,新增一个z,后面新增

    第二行:同理,拆成前中后,abbc  ,第一个匹配0个,新增z,第二个字符与第三个字符满足匹配,匹配成功,替换成z,第四个字符,不能匹配,但是匹配到了0个,后续新增一个z

    第三行:拆成前中后,abbbcd  ,第一个匹配0个,新增z,第二个字符、第三个字符、第四个字符满足匹配,匹配成功,替换成z,第五个字符,不能匹配,匹配0个,新增z,d同理,新增一个z

    总结,*号与sed连用太危险  如果真的要替换b要使用*,使用两个bb*,如

     或者使用单个替换,不使用*

  • 相关阅读:
    【万丈高楼平地起 第一季 链表是怎样链成的】
    【笔记——ASP.NET基础知识(一)】
    【万丈高楼平地起 第二季 队列和栈】
    【没有银弹No Silver Bullet】
    【简单示例:数据库表转XML】
    【软件工程小知识】
    【总结——SQL Server中的数据类型】
    【总结—.Net Framework集合类】
    【笔记——ASP.NET基础知识(二)】
    【总结——ASP.NET对象】
  • 原文地址:https://www.cnblogs.com/chongyou/p/13338092.html
Copyright © 2011-2022 走看看