我在一个文件夹中有多个文件,每个文件都有一封电子邮件。每条消息都有一个格式为
的标题主题:格式化字体
致:help@abc.com
来自:发件人姓名
消息正文
我想从所有消息中获取所有唯一的发件人名称(每个文件只有1条消息)。我怎么能这样做?
答案 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的”。