• 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*,如

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

  • 相关阅读:
    python Elementtree 生成带缩进格式的xml文件
    Tacotron2论文阅读笔记
    opencv3 7.3 重映射 仿射变换
    numpy.ndarray类型方法
    ubuntu安装百度输入法
    gitlab--cicd实践pytest和flask接口化
    django搭建完毕运行显示hello django
    django搭建
    服务器内存
    python安装第三方库aiohtpp,sanio失败,pip install multidict 失败问题
  • 原文地址:https://www.cnblogs.com/chongyou/p/13338092.html
Copyright © 2020-2023  润新知