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

时间:2009-05-03 10:04:13

标签: bash unix

我在一个文件夹中有多个文件,每个文件都有一封电子邮件。每条消息都有一个格式为

的标题

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

消息正文

我想从所有消息中获取所有唯一的发件人名称(每个文件只有1条消息)。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

假设消息中间不能有随机标题,那么这应该可以解决问题:

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

如果消息中间可能有其他误导性的“发件人:”行,那么您只需要确保只获得每条消息的第一条匹配行,如下所示:

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

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

答案 1 :(得分:0)

您要过滤掉发件人姓名或电子邮件地址吗?通常你在“From”行中都有,例如<​​/ p>

From: Lessie <etxhakk@ericsson.se>

您可以使用sed删除电子邮件地址部分

sed 's/^From: //;s/ *<[^>]*> *//'

以这样的结果结束:

ls | while read filename
do
    grep '^From: ' $filename | head -n1 | sed 's/^From: //;s/ *<[^>]*> *//;s/^"//;s/"$//'
done | sort -u

答案 2 :(得分:0)

收紧一些答案。 (我还没有足够的声誉发表评论。)以下内容应该足够了:

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

将为您提供目录中所有消息的唯一地址列表。如果你想清理地址部分,你可以添加更多的sed命令,如che的答案。没有必要'cat * | grep的”。