2014-10-18 106 views
0

大家好,我需要从多个邮箱一些帮助...... 我必须清理(删除)垃圾邮件所以我必须找到它。邮件标题由不同的反垃圾邮件工具标记,所以有一些标签,如垃圾邮件,[垃圾邮件],***垃圾邮件***等,所以我必须找到所有标签与这个“关键字”的消息。在邮箱grep的垃圾邮件标记的邮件

样品主题是:*** SPAM ***购买伟哥

我知道文件名和grep -E或者egrep的正则表达式为grep的-l。

grep -E "^Subject: \[SPAM\]" 
grep -E "^Subject: \*\*\*SPAM\*\*\*" 
grep -E "^Subject: \*\*\*\ SPAM\ \*\*\*" # (1 space before and after SPAM word) 

如何把工作在一条线上? 我用grep和替换“|”像

"^Subject: (\[SPAM\]|\*\*\*SPAM\*\*\*|\*\*\*\ SPAM\ \*\*\*)" 

但工作不好。

在一个文件中有一条消息,因此许多文件等于许多消息。文件的内容是这样的:

From: Sender <[email protected]> 
To: Receiver <[email protected]> 
Subject: *** SPAM *** Buy viagra on-line 

所以我只需要在主题行的grep。就这样。

+0

这不会删除任何东西,因此你可能要包括关于你的最终结果应该是更多信息。 – 2014-10-18 18:56:59

+0

我编辑了我的文章 - 只有如何在主题中使用grep垃圾邮件,我不需要准备好使用的脚本:-) – Nieogolony 2014-10-18 19:00:35

+0

您可以明确指出邮箱的格式吗? [邮箱文件(单个文件中的许多邮件),maildir,mh文件夹]您更喜欢哪种脚本语言? [perl,python] – AnFi 2014-10-18 19:06:27

回答

0

一般的正则表达式将是 -

^Subject:\W*SPAM(?:\W|$) 
0

这种模式应该工作:

grep -E '^Subject: [* []+SPAM[] *]+' 

通过使用它消除了使用|或陈述,需要的字符类。

输入:

Subject: [SPAM] 
Subject: SPAM   // shouldn't match 
Subject: ***SPAM*** 
Subject: *** SPAM *** 
Subject: Not Spam  // shouldn't match 
Subject: ** SPAM ** 

输出:

Subject: [SPAM] 
Subject: ***SPAM*** 
Subject: *** SPAM *** 
Subject: ** SPAM **