2009-05-03 120 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的」。

相關問題