Grep SPAM在邮箱中标记了邮件

时间:2014-10-18 18:50:04

标签: regex linux grep spam

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

示例主题是:*** SPAM ***购买伟哥

我知道grep -l用于文件名,grep -E或egrep用于正则表达式。

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

如何让togeter在一条线上工作? 我用grep替换了“|”喜欢

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

但效果不佳。

一个文件中有一条消息,因此许多文件等于许多消息。文件内容如下:

From: Sender <sender@domain.com>
To: Receiver <receiver@mailbox.com>
Subject: *** SPAM *** Buy viagra on-line

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

2 个答案:

答案 0 :(得分:0)

一般的正则表达式是 -

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

答案 1 :(得分:0)

这种模式应该有效:

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

通过使用字符类,它消除了使用| OR语句的需要。

<强>输入:

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 **