从另一个文件中查找电子邮件

时间:2017-03-02 02:37:09

标签: regex linux bash awk grep

我想从一个列出的文件中找到电子邮件:

john@blogs.com
joe@blogs.com
james@blogs.com

在另一个文件中列出:

john@blogs.com:+123456789
jack@blogs.com:+123456789
jeff@blogs.com:+123456789
james@blogs.com:+123456789

并输出第二个文件中与第一个文件匹配的行,同时记住它需要从头到尾匹配整个电子邮件,因此它不会意外地与robertjohn@blogs.com匹配。

期望的输出:

john@blogs.com:+123456789
james@blogs.com:+123456789

谢谢!

1 个答案:

答案 0 :(得分:2)

使用grep,使用-F从输入文件中获取换行符分隔的模式(此处为字符串-f),并与其他文件匹配:

grep -Ff email.txt file.txt 

使用awk,将包含电子邮件的数组作为索引,并检查第二个文件中每个记录的第一个字段是否为索引:

awk -F: 'NR==FNR{a[$0]=1; next} a[$1]' email.txt file.txt

示例:

% cat email.txt 
john@blogs.com
joe@blogs.com
james@blogs.com

% cat file.txt
john@blogs.com:+123456789
jack@blogs.com:+123456789
jeff@blogs.com:+123456789
james@blogs.com:+123456789

% grep -Ff email.txt file.txt 
john@blogs.com:+123456789
james@blogs.com:+123456789


% cat email.txt                                                  
john@blogs.com
joe@blogs.com
james@blogs.com

% cat file.txt
john@blogs.com:+123456789
jack@blogs.com:+123456789
jeff@blogs.com:+123456789
james@blogs.com:+123456789

% awk -F: 'NR==FNR{a[$0]=1; next} a[$1]' email.txt file.txt
john@blogs.com:+123456789
james@blogs.com:+123456789