2

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

文本文件如下所示:

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

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

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

4

1 回答 1

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.

于 2012-08-02T18:55:34.283 回答