大家好,我需要一些帮助...... 我必须从许多邮箱中清除(删除)垃圾邮件,因此我必须找到它。邮件由不同的反垃圾邮件工具标记在主题中,因此有一些标签,如垃圾邮件,[垃圾邮件],***垃圾邮件***等。所以我必须找到所有用这个“关键字”标记的邮件。
示例主题是:*** 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。就是这样。
答案 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 **