2012-08-29 43 views
-1

我要阐述含有这样一些文本和电子邮件地址的文件列表:解析与SED

TEXT\n 
Cc: mail1,\n 
    mail2,\n 
    mail3\n 
EMPTY LINE\n 
TEXT 

我必须加载到一个bash变量抄送列表:FOO =“MAIL1, mail2,mail3“。我该如何处理sed(或其他命令)?

+4

欢迎堆栈溢出!我们鼓励你[研究你的问题](http://stackoverflow.com/questions/how-to-ask)。如果你已经[尝试了某些东西](http://whathaveyoutried.com/),请将其添加到问题中 - 如果没有,请先研究并尝试您的问题,然后再回来。 – 2012-08-29 16:03:55

回答

0

sed通常一次只评估一条线。你可以得到它匹配多行,但这是相当丑陋的。我建议使用Perl代替。

FOO=`perl -e 'local $/=undef; open FILE, "input.txt"; $text=<FILE>; close FILE; print "$1, $2, $3" if $text =~ /Cc: (.*?),\n (.*?),\n (.*?)\n/s;'` 
+0

问题是我不知道我有多少地址,我只能使用空行作为“邮件的结尾”,所以我不能打印$ 1 $ 2 $ 3。不过非常感谢您的回复。 – user1633717

+0

你应该在之前提到过。如果$ text =〜/ Cc:(。*?),\ n(。*?),\ n(。*?)\ n/s;改成'print'$ 1,$ 2,$ 3' text =〜/ Cc:(。*?(,\ n。*?)*)\ n/s){$ addr = $ 1; $ addr =〜s/\ n // g;打印$ addr;}'然后。 –

+0

太棒了!有用!非常感谢你!! – user1633717

0

如果你有Procmail安装并输入文件的格式为像例如一个RFC822电子邮件,

FOO=$(formail -c -xCc: <file)