On 四, 2010-06-17 at 12:35 +0000, Jimmy Xu wrote: > 2010/6/17 listofx <[email protected]>: > > 虽然邮件有点长,我觉得还是保留上面的内容接着写。我有两个疑问: > > 疑问一: > > 你最后的答复我能看明白,不过,不是说还有一种叫做懒惰匹配,也就是不将匹配 > > 最大化,如果不熟悉,请看 > > http://deerchao.net/tutorials/regex/regex.htm#greedyandlazy > > > > xi...@xiang-laptop:~/tmp$ cat a > > python-gtk2-dev (2.17.0-0ubuntu2), libgladeui-1-9 > > (3.7.0.is.3.6.7-0ubuntu1), python-gtk2-doc (2.17.0-0ubuntu2) > > xi...@xiang-laptop:~/tmp$ cat a | sed 's/(.*?)//g' > > python-gtk2-dev (2.17.0-0ubuntu2), libgladeui-1-9 > > (3.7.0.is.3.6.7-0ubuntu1), python-gtk2-doc (2.17.0-0ubuntu2) > > > > 从结果可见,没有达到想要的效果 > > > > sed 不支持这种修饰符,当然您如果想用 Perl 的话这样最好。 你的解释很干脆,呵呵,谢谢!
> > 疑问二: > > 不理解cat a |sed 's/(.*)//g'为什么会匹配括号,因为按照我先前的解释, > 最终是将(.*)这样的正则表达式给了sed,而(在正则表达式中有其特殊含义, > 如果想要 > > 匹配(,正确的正则表达式是\(.*\),不是吗? > > > > sed 会将不加转义的括号当成普通字符,\( \)会被当成分组括号。 > > ji...@jimmy:~$ echo Aa | sed 's/\(A\)/[\1]/g' > [A]a > 嗯。这个地方比较诡异了。你是实验发现的,还是哪里有说明呢?看下面,多了一 个-r参数(extended regular expressions),就不能沿用你上面写的了。我看, 我得永远加上-r才能习惯,并且附加的好处是可以使用+符号等进行匹配(扩展正 则表达式的符号) $ echo Aa | sed -r 's/(A)/[\1]/g' [A]a -- ubuntu-zh mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh
