我有一些文本文件,其格式如下:
Summary:
xyz
Configuration:
abc
123
Tools:
pqr
456
标签'摘要:','配置:'和'工具:'对于所有文件保持相同,只是下面的内容发生了变化。我只需要从文本文件中提取内容并将其打印出来。
感谢。
答案 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);