我有一个文本文件,其中包含被大量垃圾包围的电子邮件地址。 我需要将电子邮件地址分开,并将每个地址写在一个单独的行中(或用逗号分隔它们)。
文本文件如下所示:
per@netvision.netאיריתשנהב;רוניאשכול99; מרכזהאולפן99; דפניאלפר; תיםרון; (eina@gmail.com)אינהדגן9303; (ori@gmail.com)אילןדור9406; 9304אורי
我想“抓住”所有以[A-Z]开头并以[A-Z]结尾的单词,因为周围的所有垃圾都不是英文字母([A-Z])。
有人可以告诉我如何编写这个脚本吗?
答案 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
。