LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 921|回复: 7

sed的一个疑惑

[复制链接]
发表于 2005-5-10 12:47:20 | 显示全部楼层 |阅读模式
为什么

echo foo | sed 's/o*/EEE/'

结果是'EEEfoo', 而不是'fEEE'。 :confused:
发表于 2005-5-10 13:23:57 | 显示全部楼层
看看“*”的含义吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-10 13:36:55 | 显示全部楼层
看了,*是0到多个的意思;但为什么不能代办foo的oo?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-10 13:37:47 | 显示全部楼层
看了,*是0到多个的意思;但为什么不能代办foo的oo?就是这里转不过弯
回复 支持 反对

使用道具 举报

发表于 2005-5-10 14:35:05 | 显示全部楼层
Post by linux_now
为什么

echo foo | sed 's/o*/EEE/'

结果是'EEEfoo', 而不是'fEEE'。 :confused:

首先*的意思是匹配前面的一个char.set出现的次数为0次或多次(注意0次)
因此s/o*/EEE/在处理foo时首先是匹配o出现0次,当然开头就匹配了,而又没有加g,因此只匹配一次!
不妨试试下面几个:
  1. echo foo|sed 's/o*/EEE/g'
复制代码
  1. echo foo|sed 's/o*o/EEE/'
复制代码
这里相当于加了边界!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-10 23:01:55 | 显示全部楼层
谢谢。终于明白了
回复 支持 反对

使用道具 举报

发表于 2005-5-12 00:42:35 | 显示全部楼层
echo foo|sed 's/[o].*/EEE/'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-12 06:30:42 | 显示全部楼层
echo foo|sed 's/oo*/EEE/'这样也可以
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表