使用tsch从文本文件中分离电子邮件地址

时间:2012-08-02 18:32:04

标签: unix email-validation tcsh

我有一个文本文件,其中包含被大量垃圾包围的电子邮件地址。 我需要将电子邮件地址分开,并将每个地址写在一个单独的行中(或用逗号分隔它们)。

文本文件如下所示:

per@netvision.netאיריתשנהב;רוניאשכול99; מרכזהאולפן99; דפניאלפר; תיםרון; (eina@gmail.com)אי​​נהדגן9303; (ori@gmail.com)אי​​לןדור9406; 9304אורי

我想“抓住”所有以[A-Z]开头并以[A-Z]结尾的单词,因为周围的所有垃圾都不是英文字母([A-Z])。

有人可以告诉我如何编写这个脚本吗?

1 个答案:

答案 0 :(得分:3)

我会使用grep -o执行此操作。它并不完全“在”tcsh中,但您可以使用任何脚本中的grep。 -o选项使grep仅返回正则表达式匹配的文本。

看起来您的输入文件当前使用分号分隔记录。这很重要,因为grep逐行读取内容。因此,我们将使用tr用换行符替换您的记录分隔符,以确保grep查看每条记录。

ghoti@pc> cat strip_email 
#!/bin/tcsh

setenv inputfile emails.txt
setenv re_email '[[:alnum:]][[:alnum:]_%=+-]*@([[:alnum:]]([[:alnum:]-])+\.)+[[:alnum:]]{2,}'

tr ';' '\n' < $inputfile | grep -Eo "$re_email"

ghoti@pc> ./strip_email 
per@netvision.net
eina@gmail.com
ori@gmail.com
ghoti@pc> 

您可以将正则表达式调整为适合您的任何内容。在unix或linux系统上,您可以查看手册页:re_format(7)regex(7)以获取文档。这里记录了[:alnum:]部分,以及isalnum