我有一大堆导出的 .eml 格式的电子邮件,我正在用类似这样的关键字搜索它们:
egrep -iR "keyword|list|foo|bar" *
由于像这样的 base64 编码电子邮件附件,因此在使用相对较短的关键字时会导致大量误报:
Inbox/Email Subject.eml:rcX2aiCZBfoogjNUShcWC64U7buTJE3rC5CeShpo/Uhz0SeGz290rljsr6woPNt3DQ0iFGzixrdj
Inbox/Email Subject.eml:3qHXNEj5sKXUa3LxfkmEAEWOpW301Pbarq2Jr2IswluaeKqCgeHIEFmFQLeY4HIcTBe3wCf6HzPL
是否有我可以编写的正则表达式来识别和排除这些匹配项,或者我可以告诉 grep 在文件到达“Content-Transfer-Encoding: base64”行时停止读取文件?
最佳答案
如果您排除任何完全由 base64 组成的匹配项,您应该只剩下感兴趣的匹配项。作为近似值,排除任何完全由 base64 组成且长度超过 60 个字符的行可能足以立即供人类使用。
egrep -iR "keyword|list|foo|bar" . |
egrep -v ':[0-9A-Za-z+/]{60,}$' |
less
如果您需要提高准确性,可以预过滤邮件以排除任何附件。您可能还想检查排除的行的长度是否为 4 个字符的偶数倍,尽管对于该特定标准您不太可能有很多误报。
关于regex - grepping .eml 文件时忽略 base64 编码的附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124223/