我该如何提取 mbox 文件中提取最新收到的消息的“日期:”标题?
请注意,这不仅仅是对“^Date:”的最新出现进行 grep 的问题,因为它可能是来自引用的回复的日期,而不是实际上收到的最新消息。
因此,可能必须涉及一些适当的解析。
grepmail似乎擅长智能地研磨 mbox,但我似乎找不到用它来完成这个看似微不足道的任务的方法。
有什么意见吗?
谢谢。
E:好吧,我正式变胖了。ls -l mbox可能会这样。就这样。
尽管如此,我还是对于更有创意的方法非常感兴趣。
答案1
由于您需要一些能够理解实际 mbox 格式的东西,因此我想到的是规范的邮件客户端mail
或传统的更强大的替代品。mailx
mailx -f /path/to/mbox -H
由于新消息是附加的,因此应按接收顺序列出您的消息。
答案2
作为起点,您可以做类似这样的事情来找到From
上一封邮件开头的行。
tac "$MAIL" | grep -m1 '^From '
以 开头的行From
表示 mbox 文件中邮件的起始点。它还包含邮件的接收时间,这通常比邮件头中的任何其他时间戳更可靠。
如果您特别想要一个Date
标题而不是行From
,您可以执行以下操作:
tac "$MAIL" | awk '/^Date: / {print} ; /^From / {exit}' | tail -1
Date:
这将打印最后一封邮件中以 开头的第一行。但是,如果最后一封邮件的标题没有Date
标题,它仍然可能与内容匹配,而不是标题,因此您需要以某种方式确保邮件确实有标题Date
。
答案3
grepmail -hH ^Date: /path/folder | grep ^Date: | tail -1
grepmail -hH ^Date: /path/folder
:-h
要求匹配在标题中,-H
仅打印匹配电子邮件的标题(即全部标题)...
| grep ^Date:
:从这些标题中,仅提取Date:
行...
| tail -1
:并且仅打印其中的最后一个。