On 四, 2010-06-17 at 12:01 +0000, Jimmy Xu wrote: > 2010/6/17 listofx <[email protected]>: > > 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 > > > > xi...@xiang-laptop:~/tmp$ cat a |sed 's/.*//g' > > > > > > xi...@xiang-laptop:~/tmp$ cat a |sed 's/\(.*\)//g' > > > > > > xi...@xiang-laptop:~/tmp$ > > 谁能告诉我后面三个怎么理解。我的理解是 > > 1. cat a |sed 's/(.*)//g' 单引号屏蔽了shell对里面任何字符的解释,结果就 > > 是sed接收到s/(.*)//g的请求,我认为()在这里会被认为是括号,由sed解释, > > 但是从上面的结果看,我的理解是错误的。 > > > > 您的理解没错,这种结果的出现是因为 * 会尽可能多地匹配,所以导致从第一 > 个 ( 到最后一个 ) 全都被替换成了空串。 > > > 2. 第二个不解释 > > > > 3. 从关于1的解释,其实sed 's/\(.*\)//g'的写法才是我想要的,因为我理解 > > shell将s/\(.*\)//g传给sed,sed自己在将转义字符\进行解释,结果就是查找以 > > 括号开始的一段文本(同时,以括号结束)。 > > > > 可以试试 s/([^)]*)//g。 > > ji...@jimmy:/tmp$ cat a |sed 's/([^)]*)//g' > python-gtk2-dev , libgladeui-1-9 , python-gtk2-doc >
虽然邮件有点长,我觉得还是保留上面的内容接着写。我有两个疑问: 疑问一: 你最后的答复我能看明白,不过,不是说还有一种叫做懒惰匹配,也就是不将匹配 最大化,如果不熟悉,请看 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) 从结果可见,没有达到想要的效果 疑问二: 不理解cat a |sed 's/(.*)//g'为什么会匹配括号,因为按照我先前的解释,最终是将(.*)这样的正则表达式给了sed,而(在正则表达式中有其特殊含义,如果想要 匹配(,正确的正则表达式是\(.*\),不是吗? 谢谢! -- ubuntu-zh mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh
