2009-05-03 9 views
2

複数のファイルがフォルダ内にあり、それぞれに1つの電子メールメッセージがあります。書式設定フォントに
[email protected]
から:送信者名
bashの送信者名の電子メールメッセージを解析する

メッセージ本文、私が取得したい

すべてのユニークな送信者それぞれのメッセージは

件名形式のヘッダを持っていますすべてのメッセージの名前(ファイルごとに1つのメッセージしかありません)。どうやってやるの?

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

「から:」他の誤解があるかもしれない場合は、次のメッセージの途中で行、これはトリックを行う必要があり、メッセージの途中でランダムヘッダがあることができないと仮定すると、

答えて

2

、その後、あなただけのあなただけそうのように、各メッセージから最初に一致した行を取得していることを確認する必要があります。

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

は明らかにあなたが別のグロブやファイル名のリストのいずれかのコマンドで*を置き換えることができます。

+0

私は '|並べ替え|結局のところユニークです。 – kch

+0

あなたは正しいです...私は元の質問の「ユニークな」部分を見逃しました。私は '| sort -u'を追加する答えを更新しました。 ( '| sort | uniq'も同様に動作します)。 – John

+0

Purely academic:Fromフィールドがヘッダーにないのに、本文に対応する行がある場合はどうなりますか? –

0

送信者の名前または電子メールアドレスを除外しますか?

ls | while read filename 
do 
    grep '^From: ' $filename | head -n1 | sed 's/^From: //;s/ *<[^>]*> *//;s/^"//;s/"$//' 
done | sort -u 
:通常は、このような

From: Lessie <[email protected]> 

ザ・としてあなたはこのようなもので終わるメールアドレスの一部

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

に削除するためにsedを使用することができ、ライン「から」中の両方を持っています

0

回答の一部を締めてください。 (私はコメントをまだ十分な評判を持っていません。)以下は十分なものでなければならない:

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

は、ディレクトリ内のすべてのメッセージのためにあなたのアドレスから固有のリストが表示されます。アドレス部分をクリーンアップしたい場合は、cheの答えのようにsedコマンドにさらに追加することができます。必要はありません 'cat * | grep '

関連する問題