分页: 1 / 1

怎么提取()中的部分[已解决]

发表于 : 2009-10-25 17:40
ghostry
我从QQ 里道出的好友列表,用grep整理了下,
下子文件内容如下
昵称(235469855)
昵称2哈哈<[email protected]>
水木阿 (658656)
都是这样的,但是我只需要()和《》中的部分。我现把《》都替换成了(),但是每行长度不一,改怎么提取()中的部分呢PS
PS:
我的最终目的是把所所有的行都变成邮件地址。是号码的就加上@qq.com

Re: 怎么提取()中的部分

发表于 : 2009-10-25 17:43
O_O_BOT
sed 's/(\(.*\))/\[email protected]/g'

Re: 怎么提取()中的部分

发表于 : 2009-10-26 10:41
maozhx
sed 's/.*(\([0-9]*\))/\[email protected]/g' filename | sed 's/.*(\(.*\))/\1/g'

Re: 怎么提取()中的部分

发表于 : 2009-10-26 12:04
xwyxn
能详细解释一下.*(\(.*\))/吗?谢谢!

Re: 怎么提取()中的部分

发表于 : 2009-10-26 12:28
maozhx
最前面的 “.*” 匹配可能的昵称和空格
里面的括号是捕获值后面给 “\1”
外面的括号是为了匹配数字帐号外面的括号

Re: 怎么提取()中的部分

发表于 : 2009-10-26 12:30
O_O_BOT
.* 有没有看你是否要 昵称

Re: 怎么提取()中的部分

发表于 : 2009-10-26 12:49
maozhx
O_O_BOT 写了:.* 有没有看你是否要 昵称
“*” 匹配任意多次或者不出现
我只是针对上面给出的格式

Re: 怎么提取()中的部分

发表于 : 2009-10-27 6:24
aerofox
再来一个:

代码: 全选

awk -F "[()]" '{print $2 "@qq.com"}'

Re: 怎么提取()中的部分

发表于 : 2009-10-27 8:55
eexpress
bash的转义罗嗦的。来perl吧。

Re: 怎么提取()中的部分

发表于 : 2010-01-26 21:42
tusooa

代码: 全选

#!/usr/bin/env perl
use 5.010;
chomp($_=<STDIN>);
say "$1@qq.com" if /\((.+)\)/;
如果@是@,要转义