0

我正在编写一个 perl 脚本,由 qmail 为每个传入的邮件调用,以解析内容并找到电子邮件的正文。这样做的原因是从数据库中添加一些用户信息,将其附加到正文,然后转发到另一个地址(列表服务器)。

无法解决的问题是这样的:

cat dbody.txt|grep -A1000 '^\s*$'

目的:找到第一个空行(作为标题信息的结尾)并在此之后全部返回

当我从命令行(使用终端)(即直接)运行该行时 - 它工作正常。返回电子邮件的正文。

当我在脚本本身中运行它时 -它没有

进行了无休止的测试,想不出为什么会这样,或者我应该改变什么。帮助!

脚本中的行 - 第一个“测试” - 工作正常。

$test =`cat dbody.txt|grep -A1000 '^\s*$'`;
$body= `cat dbody.txt|grep -A1000 '2,/^$/d'`;

当我将以上内容打印到最终电子邮件中时 - $test 返回全文(作为测试), $body 保持空白。

4

2 回答 2

2

你可以像这样使用 Perl:

use strict;
use warnings;
my $body;
open my $file, "<", "dbody.txt" or die("$!");
while (<$file>) {
    $body .= $_ if defined $body;
    $body  = "" if not defined $body and /^$/;
}
close $file;
print $body;

或者,避开美元符号:

$body= `grep -A1000 '2,/^\$/d' dbody.txt`;
于 2013-05-04T07:32:49.890 回答
1

中的标准溶液sed

sed '1,/^$/d' dbody.txt

换句话说,删除第一个空行。

请注意,您的正则表达式也是错误的,尽管在实践中是无害的。分隔线甚至不能包含任何空格(但我认为您永远不会找到带有仅空格标题行的真实电子邮件)。

于 2013-05-04T08:17:20.043 回答