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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
ghostry
帖子: 1532
注册时间: 2008-07-23 20:08
来自: http://www.ghostry.cn
联系:

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

#1

帖子 ghostry » 2009-10-25 17:40

我从QQ 里道出的好友列表,用grep整理了下,
下子文件内容如下
昵称(235469855)
昵称2哈哈<asdja@sdkf.cn>
水木阿 (658656)
都是这样的,但是我只需要()和《》中的部分。我现把《》都替换成了(),但是每行长度不一,改怎么提取()中的部分呢PS
PS:
我的最终目的是把所所有的行都变成邮件地址。是号码的就加上@qq.com
上次由 ghostry 在 2010-05-13 13:23,总共编辑 1 次。
http://www.ghostry.cn狂网技术工作室,组网建站,平面设计,java项目,空间域名.
好心人点这里进去注册并且用一次,给我增加点流量http://tinyurl.com/272ncjl
电脑配置:
公司:880G/II250/1TB/2G1333/
家:785G+/II245+/1TB/2G677/
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

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

#2

帖子 O_O_BOT » 2009-10-25 17:43

sed 's/(\(.*\))/\1@qq.com/g'
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
maozhx
帖子: 14
注册时间: 2009-09-19 18:17

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

#3

帖子 maozhx » 2009-10-26 10:41

sed 's/.*(\([0-9]*\))/\1@qq.com/g' filename | sed 's/.*(\(.*\))/\1/g'
上次由 maozhx 在 2009-10-26 13:00,总共编辑 3 次。
xwyxn
帖子: 359
注册时间: 2008-03-30 12:19

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

#4

帖子 xwyxn » 2009-10-26 12:04

能详细解释一下.*(\(.*\))/吗?谢谢!
maozhx
帖子: 14
注册时间: 2009-09-19 18:17

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

#5

帖子 maozhx » 2009-10-26 12:28

最前面的 “.*” 匹配可能的昵称和空格
里面的括号是捕获值后面给 “\1”
外面的括号是为了匹配数字帐号外面的括号
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

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

#6

帖子 O_O_BOT » 2009-10-26 12:30

.* 有没有看你是否要 昵称
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
maozhx
帖子: 14
注册时间: 2009-09-19 18:17

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

#7

帖子 maozhx » 2009-10-26 12:49

O_O_BOT 写了:.* 有没有看你是否要 昵称
“*” 匹配任意多次或者不出现
我只是针对上面给出的格式
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#8

帖子 aerofox » 2009-10-27 6:24

再来一个:

代码: 全选

awk -F "[()]" '{print $2 "@qq.com"}'
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#9

帖子 eexpress » 2009-10-27 8:55

bash的转义罗嗦的。来perl吧。
● 鸣学
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

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

#10

帖子 tusooa » 2010-01-26 21:42

代码: 全选

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

代码: 全选

] ls -ld //
回复