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

--
Jimmy Xu
-- 
ubuntu-zh mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh

回复