【发布时间】:2010-11-09 00:37:10
【问题描述】:
此 shell 脚本用于从 $2 中提取一行数据,如果它包含模式 $line。
$line 使用正则表达式 [A-Z0-9.-]+@[A-Z0-9.-]+(简单的电子邮件匹配)构造,形成文件 $1 中的行。
#! /bin/sh
clear
for line in `cat "$1" | grep -i -o -E "[A-Z0-9.-]+@[A-Z0-9.-]+"`
do
echo `cat "$2" | grep -m 1 "\b$line\b"`
done
文件 $1 包含短数据行(
文件 $2 的文本行稍长(> 80 到
运行此功能的桌面具有大量 RAM (6 Gig) 和 2-4 核的 Xenon 处理器。
是否有任何快速修复来提高性能,因为目前完全运行(并输出到另一个文件)需要 1-2 小时。
注意:我对所有建议持开放态度,但我们无法复杂地重写整个系统等。此外,数据来自第三方并且容易出现随机格式。
【问题讨论】:
-
电子邮件地址模式并不是完全正确的。正如有人已经指出的那样,它缺乏对下划线的支持,这很常见。它还缺乏对许多其他字符的支持(缺乏对加号的支持,因为我经常在地址中使用加号,这是我最喜欢的小毛病)。请参阅en.wikipedia.org/wiki/E-mail_address#Validation 了解更多信息,以及ex-parrot.com/~pdw/Mail-RFC822-Address.html 了解更完整的电子邮件地址正则表达式。
-
感谢 Mikael,+1 提供信息
标签: regex performance unix shell grep