regex - grepping .eml 文件时忽略 base64 编码的附件

标签 regex bash grep base64

我有一大堆导出的 .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/

相关文章:

Python re.finditer() : concisely detect "A or :B or C:D"

bash 提示符 : highlight command being entered

linux - 如何根据在该文件上运行的命令的输出来搜索文件

java - 找出特定包的类在 Java/Eclipse 项目中的使用位置

linux - 为什么 grep 命令在第二次执行时花费的时间更少?

javascript - 如何使用 JAVASCRIPT/正则表达式从字符串中找到 "<script>"标签

python - 匹配冒号前后的短语

bash - 我可以使用与 bash 和 zsh 相同的语法循环遍历关联数组的键吗

linux - 在不使用循环的情况下使用 bash 在终端中显示运行时钟

c# - 我有正则表达式将字符串拆分为单词、数字和标点符号列表。如何制作列表的 "a-z"和 "0-9"单个元素?