2009-05-03 122 views
2

我在一个文件夹中有多个文件,每个文件都有一个电子邮件。每个消息在格式的标题在bash中解析发件人姓名的电子邮件

主题:格式化字体
要:[email protected]
来源:汇款人姓名

消息体

我想所有的独特的发件人所有消息中的名称(每个文件只有1条消息)。我怎样才能做到这一点?

回答

2

假设有不能随意头在消息的中间,那么这应该做的伎俩:

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

如果可能有其他误导“来源:”中邮件的中间线,那么你只需要确保你只得到第一个匹配行从每封邮件,就像这样:

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

很明显,你可以用不同的水珠或文件名列表替换*在任何命令。

+0

我想添加`|排序| uniq`毕竟那 – kch 2009-05-03 10:23:15

0

是否要过滤掉发件人姓名或电子邮件地址?通常你都在“从”线路,如

From: Lessie <[email protected]> 

的,你可以使用sed删除电子邮件地址部分

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

的是这样结束了:

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

收紧一些答案。 (我没有足够的声誉尚未就此发表评论。)下面应该足够了:

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

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

相关问题