码迷,mamicode.com
首页 > 其他好文 > 详细

liunx正则危险符号“*”星号

时间:2020-07-19 00:52:38      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:文本文件   符号   原理   字符   cat   col   用两个   http   ima   

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

技术图片

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

技术图片

 

liunx正则危险符号“*”星号

标签:文本文件   符号   原理   字符   cat   col   用两个   http   ima   

原文地址:https://www.cnblogs.com/chongyou/p/13338092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!