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

发布于 2024-12-10 09:03:50 字数 191 浏览 1 评论 0原文

我有一些文本文件,其中包含以下格式的数据:

Summary:
xyz

Configuration:
abc
123

Tools:
pqr
456

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

谢谢。

I have some text file which have data in the following format:

Summary:
xyz

Configuration:
abc
123

Tools:
pqr
456

The tags 'Summary:', 'Configuration:' and 'Tools:' remain the same for all the files and just the content below that changes. I need to extract just the content from the text file and print it out.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

爱给你人给你 2024-12-17 09:03:50
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):/)
use strict;
use warnings;

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

If your non-header lines can contain :, you may need something stricter, such as:

if (/^(Summary|Configuration|Tools):/)
别在捏我脸啦 2024-12-17 09:03:50

怎么样:

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

您必须稍微清理一下正则表达式,但这应该可以做到。

How about something like:

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

You'll have to cleanup the regex a bit, but that should do it.

木森分化 2024-12-17 09:03:50

不确定您是否有一个文件或多个文件,但如果是前一种情况:

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|摘要):(.*)/ 对于所有这些。

Not sure if you have one file or many, but if the former case:

Summary: xyz

Configuration: abc 123

Tools: pqr 456

Summary: xyzxyz

Configuration: abcd 1234

Tools: pqr 457

You can use something like the following to print all configuration lines:

#!/usr/bin/env perl

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

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

Change the regex if you want other lines or to m/^(Configuration|Tools|Summary):(.*)/ for all of them.

小草泠泠 2024-12-17 09:03:50

或者相当不优雅

#!/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);

Or the considerably less elegant

#!/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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文