[Ubuntu-zh] 脚本问题(小问题)

listofx listofx在gmail.com
星期四 六月 17 18:41:32 BST 2010


On 四, 2010-06-17 at 12:35 +0000, Jimmy Xu wrote:
> 2010/6/17 listofx <listofx在gmail.com>:
> > 虽然邮件有点长,我觉得还是保留上面的内容接着写。我有两个疑问:
> > 疑问一:
> > 你最后的答复我能看明白,不过,不是说还有一种叫做懒惰匹配,也就是不将匹配
> > 最大化,如果不熟悉,请看
> > http://deerchao.net/tutorials/regex/regex.htm#greedyandlazy
> >
> > xiang在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)
> > xiang在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 会将不加转义的括号当成普通字符,\( \)会被当成分组括号。
> 
> jimmy在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 的更多信息