在bash中解析发件人名称的电子邮件

在bash中解析发件人名称的电子邮件,bash,unix,Bash,Unix,我在一个文件夹中有多个文件,每个文件都有一封电子邮件。每封邮件都有一个格式为的标题 主题:格式化字体 致:help@abc.com 发件人:发件人名称 消息体 我想从所有邮件中获取所有唯一的发件人名称(每个文件只有一封邮件)。如何做到这一点?< p>假设消息中间不可能有随机头,那么这应该是个窍门: cat * | grep '^From: ' | sort -u 如果在消息的中间可能有其他误导性的“行”,那么您只需要确保您只从每个消息中获得第一个匹配行,例如: for f in * ; do

我在一个文件夹中有多个文件,每个文件都有一封电子邮件。每封邮件都有一个格式为的标题

主题:格式化字体
致:help@abc.com
发件人:发件人名称

消息体


我想从所有邮件中获取所有唯一的发件人名称(每个文件只有一封邮件)。如何做到这一点?

< p>假设消息中间不可能有随机头,那么这应该是个窍门:

cat * | grep '^From: ' | sort -u

如果在消息的中间可能有其他误导性的“行”,那么您只需要确保您只从每个消息中获得第一个匹配行,例如:

for f in * ; do cat $f | grep '^From: ' | head -1 | sort -u ; done

显然,您可以用不同的全局文件名或文件名列表替换任一命令中的*。

是否要筛选发件人名称或电子邮件地址?通常在“From”行中都有,例如

From: Lessie <etxhakk@ericsson.se>
结果是这样的:

ls | while read filename
do
    grep '^From: ' $filename | head -n1 | sed 's/^From: //;s/ *<[^>]*> *//;s/^"//;s/"$//'
done | sort -u
ls |读取文件名时
做
grep“^From:”$filename | head-n1 | sed的/^From:/;s/*]*>*/;s/^”/;s/“$/”
完成|排序-u

来收紧一些答案。(我还没有足够的声誉发表评论。)以下几点就足够了:

grep -m 1 '^From: ' * | sed -'s/^From: *//' | sort -u

将为您提供目录中所有邮件的唯一发件人地址列表。如果您想清理地址部分,可以向sed命令添加更多内容,如che的答案。没有必要说“猫*| grep”。

你是对的。。。我错过了原始问题的“独特”部分。我更新了答案,添加了“| sort-u”。(“| sort | uniq”也可以)。纯学术性:如果页眉中缺少From字段,但正文中存在相应的行,该怎么办?
grep -m 1 '^From: ' * | sed -'s/^From: *//' | sort -u