如何从perl中的.txt文件中提取特定数据

时间:2011-10-18 19:25:53

标签: regex perl

我有一些文本文件,其格式如下:

Summary:
xyz

Configuration:
abc
123

Tools:
pqr
456

标签'摘要:','配置:'和'工具:'对于所有文件保持相同,只是下面的内容发生了变化。我只需要从文本文件中提取内容并将其打印出来。

感谢。

4 个答案:

答案 0 :(得分:1)

如下:

open(FH, '<myfile.txt');
while(<FH>)
{
  print $_ unless /Summary:|Configuration:|Tools:/;
}

你必须稍微清理正则表达式,但是应该这样做。

答案 1 :(得分:1)

use strict;
use warnings;

my (%h, $header);
while (<>) {
    if (/^(\w+):) { 
        $header = $1; 
    } elsif (defined $header) { 
        push @{$h{header}}, $_; }
}
print Dumper \%h;

如果您的非标题行可以包含:,则可能需要更严格的内容,例如:

if (/^(Summary|Configuration|Tools):/)

答案 2 :(得分:0)

不确定您是否有一个或多个文件,但如果是前一个案例:

Summary: xyz

Configuration: abc 123

Tools: pqr 456

Summary: xyzxyz

Configuration: abcd 1234

Tools: pqr 457

您可以使用以下内容打印所有配置行:

#!/usr/bin/env perl

open (FILE, 'data.txt') or die "$!";

while (<FILE>) {
    if (m/^(Configuration):(.*)/) {
      print $2 . "\n";
    }
}
close FILE;

如果您想要其他行,请更改正则表达式;对于所有行,请更改m/^(Configuration|Tools|Summary):(.*)/

答案 3 :(得分:-1)

或者相当不那么优雅

#!/usr/bin/perl
my $fi;
my $line;
my @arr;
open($fi, "< tester.txt") or die "$!";

while ($line = <$fi>) 
{
    if (!($line =~ /:/))
    {
        push(@arr, $line);
    }
}

foreach (@arr)
{
    print $_;
}

close ($fi);
close ($fo);