regex - Perl - 如何从文本文件中省略行?

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

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

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);

最佳答案

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

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

表达式 /Start/../End/ 表示“在匹配 /Start/ 的第一行到匹配 /End 的下一行/

awk 的等效代码是

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

https://stackoverflow.com/questions/66770674/

相关文章:

go - Helm : How to convert a string into lower/upp

c# - 用源发生器代替反射

javascript - 不要将数字或单词替换为下划线,而是保留破折号并删除其周围的空格

haskell - 合并两个 Either Monad 的结果

user-interface - 在 TreeView Odoo 13 之外添加按钮

django - 如何从 drf-spectacular API 文档中删除 RetrieveUpd

rust - 关于位复制的 Copy 特性是否仅从堆栈复制?

rust - 为什么 Rust 元组不使用方括号访问里面的元素?

javascript - Material-UI Select 在 onChange 后不更新

python - Pandas 在特定列的行上创建中位数