LinuxSir.cn,穿越时空的Linuxsir!

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

sed 中的扩展正则表达式不支持用括号标签()!

[复制链接]
发表于 2006-2-15 15:18:00 | 显示全部楼层 |阅读模式
好像sed中扩展正则表达式用括号标签()不行。如下命令:
cat aa.txt|sed -re 's/\([^a-z]+\)/\1 /'
就会报错:
sed:-e 表达式 #1,字符 19:Invalid reference \1 on `s' command's RHS
看它的意思好像是\1标签无效。
但是试下边的命令就可以:
cat aa.txt|sed -e 's/\([^a-z]*\)/\1 /'
我的sed版本是4.0.5,请大家测试。
发表于 2006-2-15 15:35:04 | 显示全部楼层
已经改为$1引用了,不能用\1。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-15 17:11:52 | 显示全部楼层
现在改为$1引用,没有出错,但现在查找时匹配不到扩展的正则表达式了。是不是因为加了-r参数后,标记\( \)被解释成了括号字符,以免与扩展正则表达式中的括号相混呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-15 17:15:36 | 显示全部楼层
刚才试了一下,果然是这样,那扩展正则表达式对部份字符作标签该怎么办呢?
回复 支持 反对

使用道具 举报

发表于 2006-2-16 03:18:10 | 显示全部楼层
我没有用过r,sed对reg-ext原本就支持,只是需要在表达式前加\。直接
  1. sed 's/\([^a-z]\+\).*$/\1/'
复制代码
就行。注意,+也是扩展中的,所以也要变成\+.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-16 10:59:27 | 显示全部楼层
原来如此,多谢老大!
回复 支持 反对

使用道具 举报

发表于 2006-5-17 22:24:22 | 显示全部楼层
sed 's/\([^a-z]\+\).*$/\1/'

这里的 .*$ 怎么理解啊?? .是匹配单个字符,* 是匹配0个或多个任意前面出现的字符,$是结尾,组合在一起怎么理解阿??请兄弟们指

教阿(现在知道了)
回复 支持 反对

使用道具 举报

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

本版积分规则

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