3

如何使用 perl 根据条件将行拆分为数组?

我有以下文件,每个段落之间都有空格分隔符..

日志信息.txt

               LogA
                    fjlfjdklafjdkla;fdjklafdja
                    adjalfdlafdjkla;fdla;fdl;a
                    faklfdaldflkafdlkafdklafdl
              LogB
                    djfkalfjdklafdkla;fdkla;fd
                    afdjkalfdkla;fdlk;afdla;fd
              LogC
                    djfkalfjdklafdkla;fdkla;fd
                    afdjkalfdkla;fdlk;afdla;fd


               LogA
                    fjlfjdklafjdkla;fdjklafdja
                    adjalfdlafdjkla;fdla;fdl;a
                    faklfdaldflkafdlkafdklafdl
              LogB
                    djfkalfjdklafdkla;fdkla;fd
                    afdjkalfdkla;fdlk;afdla;fd
              LogC
                    djfkalfjdklafdkla;fdkla;fd
                    afdjkalfdkla;fdlk;afdla;fd


               LogA
                    fjlfjdklafjdkla;fdjklafdja
                    adjalfdlafdjkla;fdla;fdl;a
                    faklfdaldflkafdlkafdklafdl
              LogB
                    djfkalfjdklafdkla;fdkla;fd
                    afdjkalfdkla;fdlk;afdla;fd
              LogC
                    djfkalfjdklafdkla;fdkla;fd
                    afdjkalfdkla;fdlk;afdla;fd

使用perl,如何只获取LogB信息

4

1 回答 1

1
my $LogB = 0;
while (<>) {
    $LogB = 1 if /^\s*LogB\b/;        # set flag if line is LogB
    $LogB = 0 if /^\s*Log[^B]\b/;     # clear flag if some other log starts here
    print $_ if $LogB;                # print out LogB, and its entries
}

创建一个列表,同时修剪前导空格并去掉LogBs:

my ($LogB, @data);
while (<>) {chomp;
    $LogB = 1 if /^\s*LogB\b/;
    $LogB = 0 if /^\s*Log[^B]\b/;
    $_ =~ s/^\s*(?:\bLogB\b)?\s*//;
    push(@data, $_) if $LogB and $_; 
}
print join("\n", @data), "\n";
于 2013-05-16T02:57:09.230 回答