首页 > 解决方案 > Perl - 如何从文本文件中省略行?

问题描述

我有一个文本文件,我希望从文本文件中省略一些行,并使用该字符串创建一个新文件。好消息是我的文本文件以包含“START”并以“END”结尾的行开头我需要的文本块。

例如,我的文本文件如下所示:

1
2
3
Start
4
5
6
End
7
8
Start
9
10
End

所需的输出将是两个字符串,我可以将它们输出到如下所示的文本文件中:

Start
4
5
6
End
Start
9
10
End

我目前所拥有的:

open(RH, '<', $fileName) or die $!;

while(<RH>) {
    #print $_;
    chomp $_;
    if ($_ eq 'START') {
        $str = "$str"."$_\n";
    }
}

但我不确定如何继续。

编辑:我使用以下方法回答了这个问题:

$cmd = q(awk '/Start/,/End/ {print}' foo.txt);
my $output = qx($cmd);
my @cards = split (/(?<=\End)/, $output);

标签: regexstringperl

解决方案


您可以使用 AWK 中的一些 Perl 遗产并执行此操作(假设您的文件名为 foo.txt)

perl -ne'print if /Start/../End/' foo.txt

该表达式的/Start/../End/意思是“在匹配的第一行直到匹配/Start/的下一行/End/

awk 的等效代码是

awk '/Start/,/End/ {print}' foo.txt

推荐阅读