2014-01-25 66 views

回答

0

的FORMAIL命令(往往分佈與procmail的,我認爲)可能是用於提取電子郵件標題有用:相比特設有例如解析

formail -x Date < 0000-Some-commit.patch 

一個區別sed或VonC答案中發佈的短Perl腳本是它處理換行包頭的行。

Subject: The line is so long that 
    is has been wrapped. 

這對於日期,發件人和收件人行應該是不尋常的,但對於主題行是很常見的。

即使不是formail處理的另一個角落案例是根據RFC 2047進行編碼的頭字段,如果該行包含任何內容但不含純US-ASCII,則這是必需的。

我建議您使用任何可用於您使用的語言的電子郵件/ MIME解析庫。由於您在問題標題中提到了Python,下面是一個簡短的Python示例,用於讀取由標準輸入由git format-patch創建的文件並打印它的一些標題:

import email.header 
import email.parser 
import sys 

def decode_header(s): 
    return ' '.join(
     text.decode(charset) if charset else text 
     for text, charset in email.header.decode_header(s)) 

message = email.parser.Parser().parse(sys.stdin) 
print decode_header(message['From']) 
print decode_header(message['Date']) 
print decode_header(message['Subject']) 
0

解析應該參與,因爲這git apply無助:

git apply --summary 

正如你可以在任何t/t4100/t-apply-*.expect文件看,有沒有日期或電子郵件的提。


話雖這麼說,因爲git format-patch產生的Unix郵箱格式,你可以使用工具躺在mailutilsparse such a file在C.
或(容易),用perl script

while (($line = <F>)) { 

    # set variables in order 
    chomp($line); 
    if ($line =~ /^From /){ 
     $count++; 
    } 
    elsif ($line =~ /^Date:/){ 
     ($date_text,$date) = split(/:/,$line); 
    } 
    elsif ($line =~ /^From:/){ 
     ($from_text,$from) = split(/:/,$line); 
    } 
    elsif ($line =~ /^Subject:/){ 
     ($subject_text,$subject) = split(/:/,$line); 
    }