我正在处理一个 Perl 脚本,该脚本处理来自ec2-describe-instances的输出,该脚本返回其输出,如下所示:
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
有没有办法可以使用split函数,以便将结果分成两行块,如下所示?
INSTANCE\n
TAG\n
我正在处理一个 Perl 脚本,该脚本处理来自ec2-describe-instances的输出,该脚本返回其输出,如下所示:
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
有没有办法可以使用split函数,以便将结果分成两行块,如下所示?
INSTANCE\n
TAG\n
第一个 arg ofsplit
应该是分隔您想要返回的内容。
split /(?!^)(?=(?:.*\n.*\n)+\z)/, do { local $/; <> };
但这是非常低效的。
如果要输出到句柄,可以使用:
perl -pe'()=split//,""; print "\n" if $. % 2 == 1 && $. > 1'
这类似于:
()=split//,"";
while (<>) {
print "\n" if $. % 2 == 1 && $. > 1;
print;
}
(我强烈建议省略()=split//,"";
。)
$.
读取的最后一行的行号。
如果要输出到数组,可以使用:
()=split//,"";
my @array;
my $buf;
while (<>) {
$buf .= $_;
if ($. % 2 == 1) {
push @array, $buf;
$buf = '';
}
}
(我强烈建议省略()=split//,"";
。)
如果您可以将所有内容加载到内存中,则可以使用
()=split//,"";
my @array = do { local $/; <> } =~ /\G.*\n.*\n/g;
(我强烈建议省略()=split//,"";
。)