Board logo

标题: [问题求助] 利用sed能提取出文本中的email地址吗?(已解决) [打印本页]

作者: wangb70    时间: 2013-7-24 15:07     标题: 利用sed能提取出文本中的email地址吗?(已解决)

请问下,哪位大大能把文本中的email地址提取出来?文本:
[email]Mehak@gmail.com[/email] | Facebook
    https://www.facebook.com/pages/Mehakgmailcom/248181861872358?
    [email]Mehak@gmail.com[/email]. University. 9 people like this. Want to like this page? Sign up for Facebook to get started. Sign Up. It's free and anyone can join. Already a ...
    Team Drake and Kennedy ([email]drakeandkennedy@gmail.com[/email] ...
    https://www.facebook.com/TeamDrakeAndKennedy?
    Team Drake and Kennedy ([email]drakeandkennedy@gmail.com[/email]). 1120 likes · 374 talking about this. Drake and Kennedy's journey into this world has been a ...
    [email]Alice.williams.com@gmail.com[/email] | Facebook
    https://www.facebook.com/.../Alicewilliamscomgmailcom/31452919192...?
    [email]Alice.williams.com@gmail.com[/email]. 7 likes · 0 talking about this.
    [email]sadia22222@gmail.com[/email] - Sadia Sabreen Shammee | Facebook
    https://www.facebook.com/permalink.php?story_fbid...id...?
    Flamboyant Nayeem, Jumon Ahmed, Maruf Hasan and 39 others like this. 48 of 355. View previous comments. Muhammad Kashif 03216663232 my number ...
    [email]Macharla.mallikarjun@gmail.com[/email] | Facebook
    https://www.facebook.com/Macharlamallikarjungmailcom?
    [email]Macharla.mallikarjun@gmail.com[/email]. 4 likes · 0 talking about this.
    [email]HOGER.EVENTOS@GMAIL.COM[/email] | Facebook
    https://www.facebook.com/.../HOGEREVENTOSGMAILCOM/2733076...?
    [email]HOGER.EVENTOS@GMAIL.COM[/email]. 11 likes · 0 talking about this.
    [email]Abdulwahab@Gmail..com[/email] - Local Business | Facebook
    https://www.facebook.com/.../AbdulwahabGmailcom/211068888974266?
    [email]Abdulwahab@Gmail..com[/email]. 17 likes · 0 talking about this · 13 checkins.
    www.gmail.com - Photos | Facebook
    https://www.facebook.com/pages/wwwgmailcom/162880424899?sk...?
    www.gmail.com, Las Mercedes, Venezuela. 69204 likes · 998 talking about this.
    Gmail.com | Facebook
    https://www.facebook.com/www.gmail.com.email?
    www.gmail.com - Gmail has become one of the best used web based email service in the world for both personal and professional use. You can access Gmail ...
    Bappa CHI Kheti at Gmail.com | Facebook
    https://www.facebook.com/BappaChiKhetiAtGmailcom?
    Bappa CHI Kheti at Gmail.com. 4 likes · 0 talking about this.

排除 www.gmail.com不要,只要真正的gmail邮箱地址,我看了很长时间的sed了,奈何太菜,一直下不了手啊,谁能帮下多谢多谢.[attach]6597[/attach]
作者: Python    时间: 2013-7-24 15:20

本帖最后由 Python 于 2013-7-24 15:22 编辑
  1. w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
复制代码
正则是这样的
作者: batman    时间: 2013-7-24 17:21

太复杂了,目测sed无能为力,下面给出vbs解:
  1. Dim objFSO, Rstr, Arr, Wstr
  2. Set objFSO = CreateObject("Scripting.FileSystemObject")
  3. Rstr = objFSO.OpenTextFile("a.txt").ReadAll
  4. Arr = Split(Rstr, vbCrLf)
  5. For Each str In Arr
  6.   If InStr(1, str, "@gmail.com", 1) Then GetMail(str)
  7. Next
  8. objFSO.OpenTextFile("new.txt", 2, True).Write Wstr
  9. Set objFSO = Nothing
  10. CreateObject("Wscript.Shell").Run "cmd /cstart new.txt", True, True
  11. Function GetMail(Str)
  12.   Dim objReg
  13.   Set objReg = New RegExp
  14.   objReg.Global = True
  15.   objReg.IgnoreCase = True
  16.   objReg.Pattern = "[\s]*.*?\(*([^\(]+@gmail.com).*"
  17.   Wstr = Wstr & objReg.Replace(Str, "$1") & vbCrLf
  18. End Function
复制代码

作者: CrLf    时间: 2013-7-24 17:42

本帖最后由 CrLf 于 2013-7-24 17:43 编辑

如果不要求只调用一次 sed 的话,还是很简单的
  1. sed "s/[0-9a-zA-Z.@]/\n/g" email.txt | sed "/[0-9a-zA-Z.]{1,100}@\w\w*\.\w\w*$/!d"
复制代码

作者: ShadowFiend    时间: 2013-7-24 18:11

[email]Abdulwahab@Gmail..com[/email]

这里的两个点怎么解释?
作者: PowerShell    时间: 2013-7-24 19:06

大多数脚本语言,处理此类问题的逻辑如下:
1 用findstr,select-string,grep,查找行首是字母,或者行首是空格,后续是任意的,再后续是gmail.com 的行。
对这样的每一行
2 掐头,去掉从行首到空格的内容。
3 去尾,去掉gmail.com 后面的内容。
作者: CrLf    时间: 2013-7-24 19:39

忽然发现原来每行只有一个地址,那就只需要一个 sed 了
  1. sed "s/^.*\([^0-9a-zA-Z.][0-9a-zA-Z.]{1,100}@\w\w*\.\w\w*\).*$/\1/g" a.txt
复制代码

作者: terse    时间: 2013-7-24 20:42

本帖最后由 terse 于 2013-7-24 20:45 编辑
  1. sed -nr "s/.*[ (](.*@gmail[\.]+com).*/\1/ip" "a.txt"
复制代码

作者: Seder    时间: 2013-7-24 21:04

google mail注册是有特定格式的:

您可以使用字母、数字和英文句点。

输入的字符数应在 6 到 30 之间。

作者: wangb70    时间: 2013-7-25 12:08

谢谢大家,我有点晕了,需要消化消化.我的环境是xp,想要的效果是这样的:
[email]Mehak@gmail.com[/email]
[email]drakeandkennedy@gmail.com[/email]
[email]Alice.williams.com@gmail.com[/email]
[email]sadia22222@gmail.com[/email]
[email]Macharla.mallikarjun@gmail.com[/email]
每行一个email地址,去掉重复的.
我也不懂使用sed实现,难不难,感觉可以的,能再看看吗?我还想通过这个事,学习熟悉sed,因为sed应该懂点嘛.
作者: Python    时间: 2013-7-25 14:28

回复 10# wangb70


    下载一个sed.exe放到C:\Windows\system32目录下面,打开cmd窗口,执行他们帮你写的命令。
作者: wangb70    时间: 2013-7-25 14:34

回复 3# batman
版主好,这个方法可以
还想问问,如何去重复,可以推广应用到其他搜索引擎吗,如yahoo,必应等.
作者: wangb70    时间: 2013-7-25 14:42

回复 8# terse


    太好了,让我佩服,sed没想到也可以,高兴.

sed能去重复吗?
作者: wangb70    时间: 2013-7-25 14:45

回复 11# Python


    多谢提醒,我不怕大家笑话,确实是菜鸟,不过,我讨厌自己这么菜,决心慢慢摸索学习.
作者: wangb70    时间: 2013-7-25 14:49

回复 7# CrLf


    谢谢crlf,不过好象有点问题,是不是我哪里没操作好,
作者: wangb70    时间: 2013-7-25 15:15

回复 2# Python

python好,是不是应该这样的

sed -n "/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/p" d:\5.txt

结果有些偏差啊,sed可以去重复嘛?
我自己瞎写的是这样的:
sed "/@gmail/!d" d:\5.txt

不"干净",不是纯粹的email地址,把整行都弄下来了,其实,只需要email地址,别的不要.
请帮我看下下列理解对不对:
sed "/@gmail/!d" 中,一对双引号"",在最外边,把其他的包括起来,一对斜线//,里面放的是匹配的正则,也可能是直接的表达,我不太清楚这一对双引号和一对斜线//是什么意思,如何正确使用,网上sed资料看了不少,还是概念不清楚啊,唉.
作者: Python    时间: 2013-7-25 21:10

回复 16# wangb70


双引号是命令分隔符,告诉sed双引号里面是它需要执行的命令。
这个例子中的斜线里面的内容是用于正则匹配的。

sed1line里面有删除重复行的例子,可以参考一下:
http://bbs.chinaunix.net/thread-336126-1-1.html
作者: wangb70    时间: 2013-7-26 10:36

本帖最后由 wangb70 于 2013-7-26 10:41 编辑

回复 17# Python

看了2遍"抛砖引玉----翻译加注sed1line",我直接找删除重复行的例子,好象没看见啊,是不是它没有直接说明是删除重复行,而要自己变化变化用法?
我再仔细看看.原来在这里:# delete duplicate, consecutive lines from a file (emulates "uniq")
# First line in a set of duplicate lines is kept, rest are deleted.
#删除文件中重复的连续的行(似于"uniq"命令)
#重复行中第一行保留,其他删除
sed '$!N; /^\(.*\)\n\1$/!P; D'  
###如果不是最后一行,就把下一行附加在模式空间,然后进行查找操作
###"^"和"$"中间的内容如果有重复就匹配成功.如果匹配不成功就用P打印
###第一行. 然后删除第一行.

# delete duplicate, nonconsecutive lines from a file. Beware not to
# overflow the buffer size of the hold space, or else use GNU sed.
#删除文件中重复的,但不连续的行。注意不要溢出保留空间的缓冲器的大小,
#否则使用GNU sed.
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'   
###在我的linux环境执行不了,出错是sed: -e expression #1, char 34:
###Invalid range end.是不是所谓的溢出保留空间的大小了呢?我也不得而知.
###大家补充吧.!!?????????????????




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2