忽略base64编码的athments



我有一大堆以.eml格式导出的电子邮件,我正在为关键字提供类似的关键字:

egrep -iR "keyword|list|foo|bar" *

当使用Base64编码的电子邮件附件引起的相对简短的关键字时,这会导致许多误报:

Inbox/Email Subject.eml:rcX2aiCZBfoogjNUShcWC64U7buTJE3rC5CeShpo/Uhz0SeGz290rljsr6woPNt3DQ0iFGzixrdj
Inbox/Email Subject.eml:3qHXNEj5sKXUa3LxfkmEAEWOpW301Pbarq2Jr2IswluaeKqCgeHIEFmFQLeY4HIcTBe3wCf6HzPL

我可以写一条以色符,可以识别并排除这些匹配项,还是可以告诉格雷普(Grep

如果您排除了完全由base64组成的任何匹配,则应仅保留有趣的匹配项。作为一个近似值,不包括完全由基本64组成的线长度长于60个字符的长度可能足以立即进行人类消费。

egrep -iR "keyword|list|foo|bar" . |
egrep -v ':[0-9A-Za-z+/]{60,}$' |
less

如果您需要提高准确性,则可能会预滤消息以排除任何附件。您可能还想检查排除的行是否为4个字符的多个,尽管您不太可能对该特定标准有很多误报。

您可能会发现-w GREP选项有用(仅匹配完整的单词),尽管它只会减少而不会消除误报,因为大约有1/1024的可能使字符串在一个基本-64编码文件将被非alphanumeric字符包围。

找到给定的字符串时,您可以让GREP停止匹配,例如Content-Transfer-Encoding: base64,但仅以始终停止在第一场比赛中的成本,还可以通过匹配该字符串并将最大匹配项设置为1。但是,您然后必须过滤匹配:

grep -EiR -e "Content-Transfer-Encoding: base64" -e "foo|bar" -x 1 * |
grep -v -i "Content-Transfer-Encoding: base64"

您可以使用Gawk更轻松,更精确地执行此操作:

awk 'BEGIN {IGNORECASE=1}
     /Content-Transfer-Encoding: base64/ {nextfile}
     /foo|bar/  {print FILENAME":"$0}' *

(注意:nextfile是一个gawk扩展。还有其他方法可以做到这一点,但不那么方便。)

每次您想这样做时要键入很多,因此您会变得更好,使其成为外壳功能(或脚本,但我个人更喜欢函数。)

相关内容

  • 没有找到相关文章

最新更新