|
せっかくなので作ってみました。
条件を元に多少はしょっているので、もしかしたら漏れがあるかもしれませんが。
キーは半角英数字のみ([a-z0-9]+)であると勝手に解釈しました。
ログファイルを開いている状態で実行します。
grepのように複数ファイルを一括で処理するようにはしてないです。
disabledraw;
selectall;
copy;
newfile;
disabledraw;
paste;
gofiletop;
$mailstr="[!$%&*\-./0-9;?a-z^_~=]+@[\\-.0-9a-z_~]+\\.[\\-.0-9a-z_~]+";
#lineEnd = linecount2;
while(1){
searchdown $mailstr, regular, nocasesense;
if( !result ) break;
if( lineno >= #lineEnd ) break;
$to = gettext(foundtopx,foundtopy,foundendx,foundendy);
#colNext = xtocolumn(foundendx,foundendy);
#lineNext = ytolineno(0,foundendy);
while(1){
searchup "=<";
if( !result ) break;
if( ytolineno(0,foundtopy) != #lineNext ) break;
wordleft;
if( gettext(x,y,foundtopx,foundtopy) != "to" ) {
break;
}
searchup "\\]: [a-z0-9]+: ", regular, nocasesense;
if( !result ) break;
$key = gettext(foundtopx,foundtopy,foundendx,foundendy);
searchup $key + "from=<";
if( !result ) break;
#xFrom = foundendx;
#yFrom = foundendy;
searchdown $mailstr, regular, nocasesense;
if( !result ) break;
if( #xFrom != foundtopx || #yFrom != foundtopy ) break;
$from = gettext(foundtopx,foundtopy,foundendx,foundendy);
gofileend;
insert $to + "," + $from + "\n";
break;
}
movetolineno #colNext+1, #lineNext;
title str(lineno) + "/" + str(#lineEnd);
}
movetolineno 1, #lineEnd;
beginsel;
gofiletop;
delete;
endmacro;
|
|